tokenmeter 0.9.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/LICENSE +21 -0
- package/README.md +346 -0
- package/dist/__tests__/context.test.d.ts +2 -0
- package/dist/__tests__/context.test.d.ts.map +1 -0
- package/dist/__tests__/context.test.js +94 -0
- package/dist/__tests__/context.test.js.map +1 -0
- package/dist/__tests__/elevenlabs.test.d.ts +2 -0
- package/dist/__tests__/elevenlabs.test.d.ts.map +1 -0
- package/dist/__tests__/elevenlabs.test.js +108 -0
- package/dist/__tests__/elevenlabs.test.js.map +1 -0
- package/dist/__tests__/fal.test.d.ts +2 -0
- package/dist/__tests__/fal.test.d.ts.map +1 -0
- package/dist/__tests__/fal.test.js +153 -0
- package/dist/__tests__/fal.test.js.map +1 -0
- package/dist/__tests__/pricing.test.d.ts +2 -0
- package/dist/__tests__/pricing.test.d.ts.map +1 -0
- package/dist/__tests__/pricing.test.js +76 -0
- package/dist/__tests__/pricing.test.js.map +1 -0
- package/dist/__tests__/recorder.test.d.ts +2 -0
- package/dist/__tests__/recorder.test.d.ts.map +1 -0
- package/dist/__tests__/recorder.test.js +133 -0
- package/dist/__tests__/recorder.test.js.map +1 -0
- package/dist/__tests__/storage.test.d.ts +2 -0
- package/dist/__tests__/storage.test.d.ts.map +1 -0
- package/dist/__tests__/storage.test.js +106 -0
- package/dist/__tests__/storage.test.js.map +1 -0
- package/dist/client/index.d.ts +8 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +7 -0
- package/dist/client/index.js.map +1 -0
- package/dist/config.d.ts +92 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +166 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +80 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +131 -0
- package/dist/context.js.map +1 -0
- package/dist/exporter/PostgresExporter.d.ts +82 -0
- package/dist/exporter/PostgresExporter.d.ts.map +1 -0
- package/dist/exporter/PostgresExporter.js +237 -0
- package/dist/exporter/PostgresExporter.js.map +1 -0
- package/dist/exporter/index.d.ts +8 -0
- package/dist/exporter/index.d.ts.map +1 -0
- package/dist/exporter/index.js +7 -0
- package/dist/exporter/index.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/instrumentation/proxy.d.ts +26 -0
- package/dist/instrumentation/proxy.d.ts.map +1 -0
- package/dist/instrumentation/proxy.js +337 -0
- package/dist/instrumentation/proxy.js.map +1 -0
- package/dist/instrumentation/strategies/index.d.ts +55 -0
- package/dist/instrumentation/strategies/index.d.ts.map +1 -0
- package/dist/instrumentation/strategies/index.js +429 -0
- package/dist/instrumentation/strategies/index.js.map +1 -0
- package/dist/integrations/express/index.d.ts +137 -0
- package/dist/integrations/express/index.d.ts.map +1 -0
- package/dist/integrations/express/index.js +186 -0
- package/dist/integrations/express/index.js.map +1 -0
- package/dist/integrations/inngest/index.d.ts +222 -0
- package/dist/integrations/inngest/index.d.ts.map +1 -0
- package/dist/integrations/inngest/index.js +223 -0
- package/dist/integrations/inngest/index.js.map +1 -0
- package/dist/integrations/langfuse/index.d.ts +170 -0
- package/dist/integrations/langfuse/index.d.ts.map +1 -0
- package/dist/integrations/langfuse/index.js +225 -0
- package/dist/integrations/langfuse/index.js.map +1 -0
- package/dist/integrations/next/index.d.ts +138 -0
- package/dist/integrations/next/index.d.ts.map +1 -0
- package/dist/integrations/next/index.js +170 -0
- package/dist/integrations/next/index.js.map +1 -0
- package/dist/integrations/nextjs/index.d.ts +198 -0
- package/dist/integrations/nextjs/index.d.ts.map +1 -0
- package/dist/integrations/nextjs/index.js +181 -0
- package/dist/integrations/nextjs/index.js.map +1 -0
- package/dist/integrations/vercel-ai/index.d.ts +288 -0
- package/dist/integrations/vercel-ai/index.d.ts.map +1 -0
- package/dist/integrations/vercel-ai/index.js +260 -0
- package/dist/integrations/vercel-ai/index.js.map +1 -0
- package/dist/logger.d.ts +58 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +89 -0
- package/dist/logger.js.map +1 -0
- package/dist/pricing/catalog.d.ts +10 -0
- package/dist/pricing/catalog.d.ts.map +1 -0
- package/dist/pricing/catalog.js +297 -0
- package/dist/pricing/catalog.js.map +1 -0
- package/dist/pricing/index.d.ts +77 -0
- package/dist/pricing/index.d.ts.map +1 -0
- package/dist/pricing/index.js +251 -0
- package/dist/pricing/index.js.map +1 -0
- package/dist/pricing/manifest.d.ts +156 -0
- package/dist/pricing/manifest.d.ts.map +1 -0
- package/dist/pricing/manifest.js +381 -0
- package/dist/pricing/manifest.js.map +1 -0
- package/dist/pricing/manifest.json +12786 -0
- package/dist/pricing/providers/anthropic.json +253 -0
- package/dist/pricing/providers/bedrock.json +341 -0
- package/dist/pricing/providers/bfl.json +220 -0
- package/dist/pricing/providers/elevenlabs.json +142 -0
- package/dist/pricing/providers/fal.json +15866 -0
- package/dist/pricing/providers/google.json +346 -0
- package/dist/pricing/providers/openai.json +1035 -0
- package/dist/pricing/schema.d.ts +102 -0
- package/dist/pricing/schema.d.ts.map +1 -0
- package/dist/pricing/schema.js +56 -0
- package/dist/pricing/schema.js.map +1 -0
- package/dist/processor/TokenMeterProcessor.d.ts +55 -0
- package/dist/processor/TokenMeterProcessor.d.ts.map +1 -0
- package/dist/processor/TokenMeterProcessor.js +132 -0
- package/dist/processor/TokenMeterProcessor.js.map +1 -0
- package/dist/query/client.d.ts +61 -0
- package/dist/query/client.d.ts.map +1 -0
- package/dist/query/client.js +206 -0
- package/dist/query/client.js.map +1 -0
- package/dist/query/index.d.ts +8 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +7 -0
- package/dist/query/index.js.map +1 -0
- package/dist/recorder.d.ts +74 -0
- package/dist/recorder.d.ts.map +1 -0
- package/dist/recorder.js +227 -0
- package/dist/recorder.js.map +1 -0
- package/dist/sdks/anthropic.d.ts +21 -0
- package/dist/sdks/anthropic.d.ts.map +1 -0
- package/dist/sdks/anthropic.js +258 -0
- package/dist/sdks/anthropic.js.map +1 -0
- package/dist/sdks/elevenlabs.d.ts +59 -0
- package/dist/sdks/elevenlabs.d.ts.map +1 -0
- package/dist/sdks/elevenlabs.js +192 -0
- package/dist/sdks/elevenlabs.js.map +1 -0
- package/dist/sdks/fal.d.ts +102 -0
- package/dist/sdks/fal.d.ts.map +1 -0
- package/dist/sdks/fal.js +306 -0
- package/dist/sdks/fal.js.map +1 -0
- package/dist/sdks/openai.d.ts +17 -0
- package/dist/sdks/openai.d.ts.map +1 -0
- package/dist/sdks/openai.js +191 -0
- package/dist/sdks/openai.js.map +1 -0
- package/dist/storage/interface.d.ts +15 -0
- package/dist/storage/interface.d.ts.map +1 -0
- package/dist/storage/interface.js +53 -0
- package/dist/storage/interface.js.map +1 -0
- package/dist/storage/prisma.d.ts +15 -0
- package/dist/storage/prisma.d.ts.map +1 -0
- package/dist/storage/prisma.js +135 -0
- package/dist/storage/prisma.js.map +1 -0
- package/dist/types.d.ts +206 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +45 -0
- package/dist/types.js.map +1 -0
- package/dist/vercel-ai/index.d.ts +89 -0
- package/dist/vercel-ai/index.d.ts.map +1 -0
- package/dist/vercel-ai/index.js +298 -0
- package/dist/vercel-ai/index.js.map +1 -0
- package/package.json +119 -0
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proxy Engine
|
|
3
|
+
*
|
|
4
|
+
* Creates a recursive Proxy that intercepts method calls and creates OTel spans.
|
|
5
|
+
* Calculates costs and adds them to spans before export.
|
|
6
|
+
*/
|
|
7
|
+
import { trace, context, propagation, SpanKind, SpanStatusCode, } from "@opentelemetry/api";
|
|
8
|
+
import { extractUsage } from "./strategies/index.js";
|
|
9
|
+
import { getModelPricing, calculateCost, getCachedManifest, loadManifest, } from "../pricing/manifest.js";
|
|
10
|
+
import { TM_ATTRIBUTES, GEN_AI_ATTRIBUTES } from "../types.js";
|
|
11
|
+
import { logger } from "../logger.js";
|
|
12
|
+
// The tracer instance
|
|
13
|
+
let tracer = null;
|
|
14
|
+
// Pricing manifest (loaded once)
|
|
15
|
+
let pricingManifest = null;
|
|
16
|
+
let manifestLoadPromise = null;
|
|
17
|
+
/**
|
|
18
|
+
* Ensure pricing manifest is loaded
|
|
19
|
+
*/
|
|
20
|
+
async function ensureManifestLoaded() {
|
|
21
|
+
if (pricingManifest)
|
|
22
|
+
return;
|
|
23
|
+
if (manifestLoadPromise) {
|
|
24
|
+
await manifestLoadPromise;
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
manifestLoadPromise = loadManifest()
|
|
28
|
+
.then((manifest) => {
|
|
29
|
+
pricingManifest = manifest;
|
|
30
|
+
})
|
|
31
|
+
.catch((err) => {
|
|
32
|
+
logger.warn("Failed to load pricing manifest:", err);
|
|
33
|
+
});
|
|
34
|
+
await manifestLoadPromise;
|
|
35
|
+
}
|
|
36
|
+
// Start loading manifest immediately
|
|
37
|
+
ensureManifestLoaded();
|
|
38
|
+
/**
|
|
39
|
+
* Get or create the TokenMeter tracer
|
|
40
|
+
*/
|
|
41
|
+
function getTracer() {
|
|
42
|
+
if (!tracer) {
|
|
43
|
+
tracer = trace.getTracer("tokenmeter", "5.0.0");
|
|
44
|
+
}
|
|
45
|
+
return tracer;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get baggage attributes from current context
|
|
49
|
+
*/
|
|
50
|
+
function getBaggageAttributes() {
|
|
51
|
+
const currentContext = context.active();
|
|
52
|
+
const baggage = propagation.getBaggage(currentContext);
|
|
53
|
+
if (!baggage) {
|
|
54
|
+
return {};
|
|
55
|
+
}
|
|
56
|
+
const attributes = {};
|
|
57
|
+
baggage.getAllEntries().forEach(([key, entry]) => {
|
|
58
|
+
attributes[key] = entry.value;
|
|
59
|
+
});
|
|
60
|
+
return attributes;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Detect the provider from the client instance
|
|
64
|
+
*/
|
|
65
|
+
function detectProvider(client) {
|
|
66
|
+
if (!client || typeof client !== "object")
|
|
67
|
+
return "unknown";
|
|
68
|
+
const c = client;
|
|
69
|
+
// OpenAI: has chat.completions
|
|
70
|
+
if ("chat" in c &&
|
|
71
|
+
typeof c.chat === "object" &&
|
|
72
|
+
c.chat &&
|
|
73
|
+
"completions" in c.chat) {
|
|
74
|
+
return "openai";
|
|
75
|
+
}
|
|
76
|
+
// Anthropic: has messages.create
|
|
77
|
+
if ("messages" in c && typeof c.messages === "object") {
|
|
78
|
+
return "anthropic";
|
|
79
|
+
}
|
|
80
|
+
// fal.ai: has subscribe method
|
|
81
|
+
if ("subscribe" in c && typeof c.subscribe === "function") {
|
|
82
|
+
return "fal";
|
|
83
|
+
}
|
|
84
|
+
// ElevenLabs: has textToSpeech
|
|
85
|
+
if ("textToSpeech" in c && typeof c.textToSpeech === "object") {
|
|
86
|
+
return "elevenlabs";
|
|
87
|
+
}
|
|
88
|
+
return "unknown";
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Check if a value is a Promise
|
|
92
|
+
*/
|
|
93
|
+
function isPromise(value) {
|
|
94
|
+
return (value !== null &&
|
|
95
|
+
typeof value === "object" &&
|
|
96
|
+
"then" in value &&
|
|
97
|
+
typeof value.then === "function");
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Check if a value is an async iterator (stream)
|
|
101
|
+
*/
|
|
102
|
+
function isAsyncIterable(value) {
|
|
103
|
+
return (value !== null && typeof value === "object" && Symbol.asyncIterator in value);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Calculate cost for usage data
|
|
107
|
+
*/
|
|
108
|
+
function calculateUsageCost(usage) {
|
|
109
|
+
const manifest = pricingManifest || getCachedManifest();
|
|
110
|
+
if (!manifest) {
|
|
111
|
+
logger.warn("Pricing manifest not loaded, cost will be 0");
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
const pricing = getModelPricing(usage.provider, usage.model, manifest);
|
|
115
|
+
if (!pricing) {
|
|
116
|
+
logger.warn(`Missing pricing for ${usage.provider}/${usage.model}`);
|
|
117
|
+
return 0;
|
|
118
|
+
}
|
|
119
|
+
return calculateCost({
|
|
120
|
+
inputUnits: usage.inputUnits,
|
|
121
|
+
outputUnits: usage.outputUnits,
|
|
122
|
+
cachedInputUnits: usage.cachedInputUnits,
|
|
123
|
+
}, pricing);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Add usage data and calculated cost to a span
|
|
127
|
+
*/
|
|
128
|
+
function addUsageToSpan(span, usage) {
|
|
129
|
+
const attributes = {
|
|
130
|
+
[TM_ATTRIBUTES.PROVIDER]: usage.provider,
|
|
131
|
+
[TM_ATTRIBUTES.MODEL]: usage.model,
|
|
132
|
+
};
|
|
133
|
+
if (usage.inputUnits !== undefined) {
|
|
134
|
+
attributes[TM_ATTRIBUTES.INPUT_UNITS] = usage.inputUnits;
|
|
135
|
+
attributes[GEN_AI_ATTRIBUTES.INPUT_TOKENS] = usage.inputUnits;
|
|
136
|
+
}
|
|
137
|
+
if (usage.outputUnits !== undefined) {
|
|
138
|
+
attributes[TM_ATTRIBUTES.OUTPUT_UNITS] = usage.outputUnits;
|
|
139
|
+
attributes[GEN_AI_ATTRIBUTES.OUTPUT_TOKENS] = usage.outputUnits;
|
|
140
|
+
}
|
|
141
|
+
attributes[GEN_AI_ATTRIBUTES.MODEL] = usage.model;
|
|
142
|
+
attributes[GEN_AI_ATTRIBUTES.SYSTEM] = usage.provider;
|
|
143
|
+
// Calculate and add cost BEFORE span.end()
|
|
144
|
+
const costUsd = calculateUsageCost(usage);
|
|
145
|
+
attributes[TM_ATTRIBUTES.COST_USD] = costUsd;
|
|
146
|
+
span.setAttributes(attributes);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Wrap an async iterator to track usage from streamed responses
|
|
150
|
+
*/
|
|
151
|
+
function wrapAsyncIterator(iterator, span, provider, methodPath, args) {
|
|
152
|
+
const originalIterator = iterator[Symbol.asyncIterator]();
|
|
153
|
+
let accumulatedUsage = null;
|
|
154
|
+
const wrappedIterator = {
|
|
155
|
+
async next() {
|
|
156
|
+
try {
|
|
157
|
+
const result = await originalIterator.next();
|
|
158
|
+
if (result.done) {
|
|
159
|
+
// Stream completed - extract final usage if available
|
|
160
|
+
if (accumulatedUsage) {
|
|
161
|
+
addUsageToSpan(span, accumulatedUsage);
|
|
162
|
+
}
|
|
163
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
164
|
+
span.end();
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
// Accumulate usage from chunks (OpenAI streams include usage in final chunk)
|
|
168
|
+
const chunk = result.value;
|
|
169
|
+
if (chunk && typeof chunk === "object" && "usage" in chunk) {
|
|
170
|
+
const usage = extractUsage(methodPath, chunk, args, provider);
|
|
171
|
+
if (usage) {
|
|
172
|
+
accumulatedUsage = usage;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return result;
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
span.recordException(error);
|
|
180
|
+
span.setStatus({
|
|
181
|
+
code: SpanStatusCode.ERROR,
|
|
182
|
+
message: error instanceof Error ? error.message : String(error),
|
|
183
|
+
});
|
|
184
|
+
span.end();
|
|
185
|
+
throw error;
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
async return(value) {
|
|
189
|
+
// Stream was cancelled - still calculate cost for what we consumed
|
|
190
|
+
if (accumulatedUsage) {
|
|
191
|
+
addUsageToSpan(span, accumulatedUsage);
|
|
192
|
+
}
|
|
193
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
194
|
+
span.end();
|
|
195
|
+
if (originalIterator.return) {
|
|
196
|
+
return originalIterator.return(value);
|
|
197
|
+
}
|
|
198
|
+
return { done: true, value: undefined };
|
|
199
|
+
},
|
|
200
|
+
async throw(error) {
|
|
201
|
+
// Stream errored - still calculate cost for what we consumed
|
|
202
|
+
if (accumulatedUsage) {
|
|
203
|
+
addUsageToSpan(span, accumulatedUsage);
|
|
204
|
+
}
|
|
205
|
+
span.recordException(error);
|
|
206
|
+
span.setStatus({
|
|
207
|
+
code: SpanStatusCode.ERROR,
|
|
208
|
+
message: error instanceof Error ? error.message : String(error),
|
|
209
|
+
});
|
|
210
|
+
span.end();
|
|
211
|
+
if (originalIterator.throw) {
|
|
212
|
+
return originalIterator.throw(error);
|
|
213
|
+
}
|
|
214
|
+
throw error;
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
return {
|
|
218
|
+
[Symbol.asyncIterator]: () => wrappedIterator,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Create a monitored proxy for a client instance
|
|
223
|
+
*
|
|
224
|
+
* @param client - The SDK client instance to wrap
|
|
225
|
+
* @param options - Configuration options
|
|
226
|
+
* @returns A proxied version of the client that creates spans for method calls
|
|
227
|
+
*
|
|
228
|
+
* @example
|
|
229
|
+
* ```typescript
|
|
230
|
+
* import OpenAI from 'openai';
|
|
231
|
+
* import { monitor } from 'tokenmeter';
|
|
232
|
+
*
|
|
233
|
+
* const openai = monitor(new OpenAI({ apiKey: '...' }));
|
|
234
|
+
* await openai.chat.completions.create({ model: 'gpt-4o', messages: [...] });
|
|
235
|
+
* ```
|
|
236
|
+
*/
|
|
237
|
+
export function monitor(client, options = {}) {
|
|
238
|
+
const provider = options.provider || detectProvider(client);
|
|
239
|
+
const clientName = options.name || provider;
|
|
240
|
+
const baseAttributes = options.attributes || {};
|
|
241
|
+
/**
|
|
242
|
+
* Create a recursive proxy handler
|
|
243
|
+
*/
|
|
244
|
+
function createProxyHandler(path = []) {
|
|
245
|
+
return {
|
|
246
|
+
get(target, prop, receiver) {
|
|
247
|
+
const value = Reflect.get(target, prop, receiver);
|
|
248
|
+
// Skip symbols and internal properties
|
|
249
|
+
if (typeof prop === "symbol" || prop.startsWith("_")) {
|
|
250
|
+
return value;
|
|
251
|
+
}
|
|
252
|
+
// If it's a function, wrap it
|
|
253
|
+
if (typeof value === "function") {
|
|
254
|
+
return function (...args) {
|
|
255
|
+
const methodPath = [...path, prop];
|
|
256
|
+
const spanName = `${clientName}.${methodPath.join(".")}`;
|
|
257
|
+
// Get baggage attributes from context (set by withAttributes)
|
|
258
|
+
const baggageAttrs = getBaggageAttributes();
|
|
259
|
+
// Start span with base + baggage attributes
|
|
260
|
+
const currentTracer = getTracer();
|
|
261
|
+
const span = currentTracer.startSpan(spanName, {
|
|
262
|
+
kind: SpanKind.CLIENT,
|
|
263
|
+
attributes: {
|
|
264
|
+
...baseAttributes,
|
|
265
|
+
...baggageAttrs, // Include baggage attributes (org.id, user.id, etc.)
|
|
266
|
+
[TM_ATTRIBUTES.PROVIDER]: provider,
|
|
267
|
+
"rpc.service": clientName,
|
|
268
|
+
"rpc.method": methodPath.join("."),
|
|
269
|
+
},
|
|
270
|
+
});
|
|
271
|
+
// Execute within span context
|
|
272
|
+
return context.with(trace.setSpan(context.active(), span), () => {
|
|
273
|
+
try {
|
|
274
|
+
const result = value.apply(this === receiver ? target : this, args);
|
|
275
|
+
// Handle async results
|
|
276
|
+
if (isPromise(result)) {
|
|
277
|
+
return result.then((resolved) => {
|
|
278
|
+
// Check if result is a stream
|
|
279
|
+
if (isAsyncIterable(resolved)) {
|
|
280
|
+
return wrapAsyncIterator(resolved, span, provider, methodPath, args);
|
|
281
|
+
}
|
|
282
|
+
// Extract usage from result
|
|
283
|
+
const usage = extractUsage(methodPath, resolved, args, provider);
|
|
284
|
+
if (usage) {
|
|
285
|
+
addUsageToSpan(span, usage);
|
|
286
|
+
}
|
|
287
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
288
|
+
span.end();
|
|
289
|
+
return resolved;
|
|
290
|
+
}, (error) => {
|
|
291
|
+
span.recordException(error);
|
|
292
|
+
span.setStatus({
|
|
293
|
+
code: SpanStatusCode.ERROR,
|
|
294
|
+
message: error instanceof Error
|
|
295
|
+
? error.message
|
|
296
|
+
: String(error),
|
|
297
|
+
});
|
|
298
|
+
span.end();
|
|
299
|
+
throw error;
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
// Handle sync results (rare for API calls)
|
|
303
|
+
if (isAsyncIterable(result)) {
|
|
304
|
+
return wrapAsyncIterator(result, span, provider, methodPath, args);
|
|
305
|
+
}
|
|
306
|
+
const usage = extractUsage(methodPath, result, args, provider);
|
|
307
|
+
if (usage) {
|
|
308
|
+
addUsageToSpan(span, usage);
|
|
309
|
+
}
|
|
310
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
311
|
+
span.end();
|
|
312
|
+
return result;
|
|
313
|
+
}
|
|
314
|
+
catch (error) {
|
|
315
|
+
span.recordException(error);
|
|
316
|
+
span.setStatus({
|
|
317
|
+
code: SpanStatusCode.ERROR,
|
|
318
|
+
message: error instanceof Error ? error.message : String(error),
|
|
319
|
+
});
|
|
320
|
+
span.end();
|
|
321
|
+
throw error;
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
// If it's an object, recursively proxy it
|
|
327
|
+
if (value !== null && typeof value === "object") {
|
|
328
|
+
return new Proxy(value, createProxyHandler([...path, prop]));
|
|
329
|
+
}
|
|
330
|
+
return value;
|
|
331
|
+
},
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
return new Proxy(client, createProxyHandler());
|
|
335
|
+
}
|
|
336
|
+
export default monitor;
|
|
337
|
+
//# sourceMappingURL=proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/instrumentation/proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extraction Strategies
|
|
3
|
+
*
|
|
4
|
+
* Each strategy knows how to extract usage data from a specific provider's API responses.
|
|
5
|
+
*/
|
|
6
|
+
import type { ExtractionStrategy, UsageData } from "../../types.js";
|
|
7
|
+
/**
|
|
8
|
+
* OpenAI extraction strategy
|
|
9
|
+
*/
|
|
10
|
+
export declare const openaiStrategy: ExtractionStrategy;
|
|
11
|
+
/**
|
|
12
|
+
* Anthropic extraction strategy
|
|
13
|
+
*/
|
|
14
|
+
export declare const anthropicStrategy: ExtractionStrategy;
|
|
15
|
+
/**
|
|
16
|
+
* fal.ai extraction strategy
|
|
17
|
+
*/
|
|
18
|
+
export declare const falStrategy: ExtractionStrategy;
|
|
19
|
+
/**
|
|
20
|
+
* ElevenLabs extraction strategy
|
|
21
|
+
*/
|
|
22
|
+
export declare const elevenlabsStrategy: ExtractionStrategy;
|
|
23
|
+
/**
|
|
24
|
+
* AWS Bedrock extraction strategy
|
|
25
|
+
*/
|
|
26
|
+
export declare const bedrockStrategy: ExtractionStrategy;
|
|
27
|
+
/**
|
|
28
|
+
* Google Vertex AI / Gemini extraction strategy
|
|
29
|
+
*/
|
|
30
|
+
export declare const vertexAIStrategy: ExtractionStrategy;
|
|
31
|
+
/**
|
|
32
|
+
* BFL (Black Forest Labs) extraction strategy
|
|
33
|
+
*
|
|
34
|
+
* Note: BFL responses are similar to fal.ai but use "id" (not "requestId")
|
|
35
|
+
* and have "sample" field for images. fal.ai uses "requestId" (camelCase).
|
|
36
|
+
*/
|
|
37
|
+
export declare const bflStrategy: ExtractionStrategy;
|
|
38
|
+
/**
|
|
39
|
+
* Vercel AI SDK extraction strategy
|
|
40
|
+
* Handles generateText, streamText, generateObject, streamObject results
|
|
41
|
+
*/
|
|
42
|
+
export declare const vercelAIStrategy: ExtractionStrategy;
|
|
43
|
+
/**
|
|
44
|
+
* All registered strategies
|
|
45
|
+
*/
|
|
46
|
+
export declare const strategies: ExtractionStrategy[];
|
|
47
|
+
/**
|
|
48
|
+
* Find the appropriate strategy for a given result
|
|
49
|
+
*/
|
|
50
|
+
export declare function findStrategy(methodPath: string[], result: unknown): ExtractionStrategy | null;
|
|
51
|
+
/**
|
|
52
|
+
* Extract usage data using the appropriate strategy
|
|
53
|
+
*/
|
|
54
|
+
export declare function extractUsage(methodPath: string[], result: unknown, args: unknown[], providerHint?: string): UsageData | null;
|
|
55
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/instrumentation/strategies/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,kBAwD5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,kBAqD/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,kBA4DzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,kBAyDhC,CAAC;AAsBF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,kBA8D7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,kBAwD9B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,kBAgEzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,kBA0E9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,kBAAkB,EAS1C,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAAE,EACpB,MAAM,EAAE,OAAO,GACd,kBAAkB,GAAG,IAAI,CAO3B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAAE,EACpB,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,OAAO,EAAE,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,SAAS,GAAG,IAAI,CAgBlB"}
|