@frugalco/frugal-sdk-node 0.2.0 → 0.4.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/README.md +21 -10
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +130 -4
- package/dist/config.js.map +1 -1
- package/dist/duplicate-filter.d.ts +46 -0
- package/dist/duplicate-filter.d.ts.map +1 -0
- package/dist/duplicate-filter.js +168 -0
- package/dist/duplicate-filter.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/instrument.d.ts +36 -1
- package/dist/instrument.d.ts.map +1 -1
- package/dist/instrument.js +242 -22
- package/dist/instrument.js.map +1 -1
- package/dist/otel.d.ts +2 -0
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +17 -2
- package/dist/otel.js.map +1 -1
- package/dist/prompt-analyzer.d.ts +12 -1
- package/dist/prompt-analyzer.d.ts.map +1 -1
- package/dist/prompt-analyzer.js +185 -14
- package/dist/prompt-analyzer.js.map +1 -1
- package/dist/providers.d.ts +87 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +128 -0
- package/dist/providers.js.map +1 -0
- package/dist/semconv.d.ts +12 -0
- package/dist/semconv.d.ts.map +1 -1
- package/dist/semconv.js +31 -0
- package/dist/semconv.js.map +1 -1
- package/dist/streams.d.ts.map +1 -1
- package/dist/streams.js +15 -2
- package/dist/streams.js.map +1 -1
- package/dist/track.d.ts +32 -4
- package/dist/track.d.ts.map +1 -1
- package/dist/track.js +2 -1
- package/dist/track.js.map +1 -1
- package/dist/wrappers/anthropic.d.ts.map +1 -1
- package/dist/wrappers/anthropic.js +9 -1
- package/dist/wrappers/anthropic.js.map +1 -1
- package/dist/wrappers/batch.d.ts +11 -0
- package/dist/wrappers/batch.d.ts.map +1 -0
- package/dist/wrappers/batch.js +338 -0
- package/dist/wrappers/batch.js.map +1 -0
- package/dist/wrappers/openai.d.ts.map +1 -1
- package/dist/wrappers/openai.js +37 -30
- package/dist/wrappers/openai.js.map +1 -1
- package/dist/wrappers/patching.d.ts +10 -0
- package/dist/wrappers/patching.d.ts.map +1 -0
- package/dist/wrappers/patching.js +38 -0
- package/dist/wrappers/patching.js.map +1 -0
- package/package.json +1 -1
package/dist/instrument.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type CallerInfo } from "./caller.js";
|
|
2
2
|
import type { Config } from "./config.js";
|
|
3
3
|
import { type Instruments } from "./otel.js";
|
|
4
|
+
import { type ProviderEntry } from "./providers.js";
|
|
4
5
|
import { type RequestPayload } from "./prompt-analyzer.js";
|
|
5
6
|
export interface CallContext {
|
|
6
7
|
system: string;
|
|
@@ -11,6 +12,13 @@ export interface CallContext {
|
|
|
11
12
|
batched?: boolean;
|
|
12
13
|
/** Captured request kwargs for prompt analysis + cap utilization. */
|
|
13
14
|
requestPayload?: RequestPayload;
|
|
15
|
+
/**
|
|
16
|
+
* Optional caller-defined tag (e.g. a business unit) for the
|
|
17
|
+
* frugal.custom_label attribute. Set ONLY by
|
|
18
|
+
* the manual track API (trackAICall / startAICall) — provider wrappers must
|
|
19
|
+
* leave it unset. Values outside the config allowlist are coerced to "other".
|
|
20
|
+
*/
|
|
21
|
+
customLabel?: string;
|
|
14
22
|
}
|
|
15
23
|
export interface UsageReport {
|
|
16
24
|
responseModel?: string | null;
|
|
@@ -37,13 +45,40 @@ export declare class CallEmitter {
|
|
|
37
45
|
readonly caller: CallerInfo;
|
|
38
46
|
private readonly instruments;
|
|
39
47
|
private readonly startSec;
|
|
48
|
+
private readonly provider;
|
|
49
|
+
private readonly operation;
|
|
40
50
|
private finalized;
|
|
41
|
-
constructor(config: Config, ctx: CallContext, caller: CallerInfo, instruments: Instruments, startSec: number);
|
|
51
|
+
constructor(config: Config, ctx: CallContext, caller: CallerInfo, instruments: Instruments, startSec: number, provider: ProviderEntry, operation: string);
|
|
42
52
|
success(usage: UsageReport): void;
|
|
53
|
+
private recordCallShape;
|
|
54
|
+
private recordInternalError;
|
|
55
|
+
private recordDuplicate;
|
|
43
56
|
private recordCapUtilization;
|
|
44
57
|
private maybeAnalyze;
|
|
45
58
|
private recordStable;
|
|
46
59
|
error(err: unknown): void;
|
|
47
60
|
private baseAttrs;
|
|
48
61
|
}
|
|
62
|
+
export interface BatchRequestGroup {
|
|
63
|
+
requestModel: string;
|
|
64
|
+
count: number;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Record the calls a batch submission carries — one counter increment per
|
|
68
|
+
* (model, count) group so mixed-model batches attribute per model. Duration
|
|
69
|
+
* and error accounting for the submitting HTTP call stay on its CallEmitter;
|
|
70
|
+
* this only records the fanned-out request volume.
|
|
71
|
+
*/
|
|
72
|
+
export declare function recordBatchedCalls(config: Config, base: {
|
|
73
|
+
system: string;
|
|
74
|
+
operation: string;
|
|
75
|
+
}, caller: CallerInfo, groups: readonly BatchRequestGroup[]): void;
|
|
76
|
+
/**
|
|
77
|
+
* Record one batch result entry's token usage. No calls increment — the
|
|
78
|
+
* request was already counted at submission; results only attribute spend.
|
|
79
|
+
*/
|
|
80
|
+
export declare function recordBatchedUsage(config: Config, base: {
|
|
81
|
+
system: string;
|
|
82
|
+
operation: string;
|
|
83
|
+
}, caller: CallerInfo, requestModel: string, usage: UsageReport): void;
|
|
49
84
|
//# sourceMappingURL=instrument.d.ts.map
|
package/dist/instrument.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument.d.ts","sourceRoot":"","sources":["../src/instrument.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7D,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"instrument.d.ts","sourceRoot":"","sources":["../src/instrument.ts"],"names":[],"mappings":"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"}
|
package/dist/instrument.js
CHANGED
|
@@ -9,8 +9,10 @@ import { consumeCapHitEvent, resolveCaller, } from "./caller.js";
|
|
|
9
9
|
import { emitLogOnce } from "./debug.js";
|
|
10
10
|
import { getInstruments } from "./otel.js";
|
|
11
11
|
import { getSharedBlockHashLRU } from "./block-hash-lru.js";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
12
|
+
import { normalizeOperation, normalizeProvider, warnInvalidOnce, } from "./providers.js";
|
|
13
|
+
import { analyzeRequest, historyBucket, historyDepth, requestSignature, shouldSample, structuredOutputMode, } from "./prompt-analyzer.js";
|
|
14
|
+
import { getSharedDuplicateFilter } from "./duplicate-filter.js";
|
|
15
|
+
import { BLOCK_SCHEMA, BLOCK_SYSTEM, BLOCK_TOOLS, BLOCK_USER, CUSTOM_LABEL_OTHER, FRUGAL_BATCHED, FRUGAL_BLOCK, FRUGAL_CALLER_FILE, FRUGAL_CALLER_FUNCTION, FRUGAL_CUSTOMER_ID, FRUGAL_CUSTOM_LABEL, FRUGAL_DUP_STATE, FRUGAL_ERROR_TYPE, FRUGAL_HISTORY_BUCKET, FRUGAL_PROJECT_ID, FRUGAL_STABLE, FRUGAL_STRUCTURED_OUTPUT_MODE, GEN_AI_OPERATION_NAME, GEN_AI_PROVIDER_NAME, GEN_AI_REQUEST_MODEL, GEN_AI_RESPONSE_MODEL, GEN_AI_SYSTEM, GEN_AI_TOKEN_TYPE, TOKEN_INPUT, TOKEN_OUTPUT, } from "./semconv.js";
|
|
14
16
|
export function startCall(config, ctx, opts = {}) {
|
|
15
17
|
const instruments = getInstruments(config);
|
|
16
18
|
const caller = opts.caller ??
|
|
@@ -21,12 +23,14 @@ export function startCall(config, ctx, opts = {}) {
|
|
|
21
23
|
maxCallSites: config.maxCallSites,
|
|
22
24
|
skipFrames: opts.skipFrames ?? 2,
|
|
23
25
|
});
|
|
26
|
+
const customLabel = resolveCustomLabel(ctx, config);
|
|
24
27
|
if (consumeCapHitEvent()) {
|
|
25
28
|
emitLogOnce("cardinality_cap", "warn", "call-site cardinality cap hit; further distinct (file, function) call sites are attributed to an overflow bucket. Raise FRUGAL_MAX_CALL_SITES if this is unexpected.");
|
|
26
29
|
try {
|
|
27
30
|
instruments.internalErrors.add(1, {
|
|
28
31
|
...(config.customerId ? { [FRUGAL_CUSTOMER_ID]: config.customerId } : {}),
|
|
29
32
|
[FRUGAL_PROJECT_ID]: config.projectId,
|
|
33
|
+
...(customLabel !== null ? { [FRUGAL_CUSTOM_LABEL]: customLabel } : {}),
|
|
30
34
|
"frugal.internal_error.stage": "cardinality_cap_hit",
|
|
31
35
|
});
|
|
32
36
|
}
|
|
@@ -34,7 +38,12 @@ export function startCall(config, ctx, opts = {}) {
|
|
|
34
38
|
// never let our own metric emission break a customer call
|
|
35
39
|
}
|
|
36
40
|
}
|
|
37
|
-
|
|
41
|
+
// Normalize the constrained-vocabulary labels once, here, so every path
|
|
42
|
+
// (manual track API + per-provider wrappers) coerces typos and dual-emits.
|
|
43
|
+
// Customer-registered providers (FRUGAL_CUSTOM_PROVIDERS) pass through verbatim.
|
|
44
|
+
const provider = normalizeProvider(ctx.system, config.customProviders);
|
|
45
|
+
const operation = normalizeOperation(ctx.operation);
|
|
46
|
+
return new CallEmitter(config, ctx, caller, instruments, nowSeconds(), provider, operation);
|
|
38
47
|
}
|
|
39
48
|
function nowSeconds() {
|
|
40
49
|
// performance.now() returns ms with sub-ms resolution.
|
|
@@ -46,13 +55,19 @@ export class CallEmitter {
|
|
|
46
55
|
caller;
|
|
47
56
|
instruments;
|
|
48
57
|
startSec;
|
|
58
|
+
provider;
|
|
59
|
+
operation;
|
|
49
60
|
finalized = false;
|
|
50
|
-
constructor(config, ctx, caller, instruments, startSec
|
|
61
|
+
constructor(config, ctx, caller, instruments, startSec,
|
|
62
|
+
// Normalized constrained labels — see startCall.
|
|
63
|
+
provider, operation) {
|
|
51
64
|
this.config = config;
|
|
52
65
|
this.ctx = ctx;
|
|
53
66
|
this.caller = caller;
|
|
54
67
|
this.instruments = instruments;
|
|
55
68
|
this.startSec = startSec;
|
|
69
|
+
this.provider = provider;
|
|
70
|
+
this.operation = operation;
|
|
56
71
|
}
|
|
57
72
|
success(usage) {
|
|
58
73
|
if (this.finalized)
|
|
@@ -64,16 +79,24 @@ export class CallEmitter {
|
|
|
64
79
|
}
|
|
65
80
|
const duration = nowSeconds() - this.startSec;
|
|
66
81
|
this.instruments.operationDuration.record(duration, attrs);
|
|
67
|
-
this.
|
|
82
|
+
const shape = this.recordCallShape(attrs);
|
|
83
|
+
this.instruments.calls.add(1, shape.callAttrs);
|
|
84
|
+
// token.usage carries history_bucket (so spend can be sliced by history
|
|
85
|
+
// size directly) but deliberately NOT structured_output_mode: it is the
|
|
86
|
+
// highest-volume histogram, and the extra 4× fan-out is not worth it when
|
|
87
|
+
// that cross-tab already lives on the cheap calls counter.
|
|
88
|
+
const tokenAttrs = shape.bucket !== null
|
|
89
|
+
? { ...attrs, [FRUGAL_HISTORY_BUCKET]: shape.bucket }
|
|
90
|
+
: attrs;
|
|
68
91
|
if (nonNull(usage.inputTokens)) {
|
|
69
92
|
this.instruments.tokenUsage.record(usage.inputTokens, {
|
|
70
|
-
...
|
|
93
|
+
...tokenAttrs,
|
|
71
94
|
[GEN_AI_TOKEN_TYPE]: TOKEN_INPUT,
|
|
72
95
|
});
|
|
73
96
|
}
|
|
74
97
|
if (nonNull(usage.outputTokens)) {
|
|
75
98
|
this.instruments.tokenUsage.record(usage.outputTokens, {
|
|
76
|
-
...
|
|
99
|
+
...tokenAttrs,
|
|
77
100
|
[GEN_AI_TOKEN_TYPE]: TOKEN_OUTPUT,
|
|
78
101
|
});
|
|
79
102
|
}
|
|
@@ -87,20 +110,106 @@ export class CallEmitter {
|
|
|
87
110
|
this.instruments.reasoningTokens.record(usage.reasoningTokens, attrs);
|
|
88
111
|
}
|
|
89
112
|
this.recordCapUtilization(usage, attrs);
|
|
113
|
+
this.recordDuplicate(attrs);
|
|
90
114
|
this.maybeAnalyze(attrs);
|
|
91
115
|
}
|
|
116
|
+
// Label derivation must never cost the call its core spend metrics: this
|
|
117
|
+
// sits ahead of calls.add/token_usage.record, and a payload with a throwing
|
|
118
|
+
// getter/proxy (LangChain-style lazy objects) would otherwise drop them all.
|
|
119
|
+
// On failure the base attrs are returned unlabeled — with a diagnostic, so a
|
|
120
|
+
// permanently unlabeled call site is distinguishable from one that simply
|
|
121
|
+
// never passes a payload.
|
|
122
|
+
recordCallShape(attrs) {
|
|
123
|
+
try {
|
|
124
|
+
const payload = this.ctx.requestPayload;
|
|
125
|
+
const depth = payload ? historyDepth(payload) : null;
|
|
126
|
+
if (depth !== null) {
|
|
127
|
+
this.instruments.historyDepth.record(depth, stripErrorType(attrs));
|
|
128
|
+
}
|
|
129
|
+
const bucket = depth !== null ? historyBucket(depth) : null;
|
|
130
|
+
const callAttrs = { ...attrs };
|
|
131
|
+
if (bucket !== null) {
|
|
132
|
+
callAttrs[FRUGAL_HISTORY_BUCKET] = bucket;
|
|
133
|
+
}
|
|
134
|
+
if (payload) {
|
|
135
|
+
callAttrs[FRUGAL_STRUCTURED_OUTPUT_MODE] = structuredOutputMode(payload);
|
|
136
|
+
}
|
|
137
|
+
return { callAttrs, bucket };
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
emitLogOnce("call_shape_failed", "warn", `call-shape label derivation failed: ${errorName(err)} — history_depth and the history_bucket/structured_output_mode labels may be missing`);
|
|
141
|
+
this.recordInternalError("call_shape", err);
|
|
142
|
+
return { callAttrs: attrs, bucket: null };
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Shared internal-error emission for per-call stages. Itself guarded — our
|
|
146
|
+
// own diagnostics must never break a customer call.
|
|
147
|
+
recordInternalError(stage, err) {
|
|
148
|
+
try {
|
|
149
|
+
const customLabel = resolveCustomLabel(this.ctx, this.config);
|
|
150
|
+
this.instruments.internalErrors.add(1, {
|
|
151
|
+
...(this.config.customerId
|
|
152
|
+
? { [FRUGAL_CUSTOMER_ID]: this.config.customerId }
|
|
153
|
+
: {}),
|
|
154
|
+
[FRUGAL_PROJECT_ID]: this.config.projectId,
|
|
155
|
+
...(customLabel !== null
|
|
156
|
+
? { [FRUGAL_CUSTOM_LABEL]: customLabel }
|
|
157
|
+
: {}),
|
|
158
|
+
"frugal.internal_error.stage": stage,
|
|
159
|
+
"frugal.internal_error.type": errorName(err),
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
catch { }
|
|
163
|
+
}
|
|
164
|
+
recordDuplicate(attrs) {
|
|
165
|
+
try {
|
|
166
|
+
const filter = getSharedDuplicateFilter(this.config);
|
|
167
|
+
if (filter === null)
|
|
168
|
+
return;
|
|
169
|
+
const payload = this.ctx.requestPayload;
|
|
170
|
+
if (!payload)
|
|
171
|
+
return;
|
|
172
|
+
const callSiteId = `${this.caller.file}:${this.caller.function}`;
|
|
173
|
+
const signature = requestSignature(payload, this.ctx.requestModel, callSiteId);
|
|
174
|
+
if (signature === null)
|
|
175
|
+
return;
|
|
176
|
+
const state = filter.seenBefore(signature);
|
|
177
|
+
if (state === null)
|
|
178
|
+
return;
|
|
179
|
+
this.instruments.duplicateRequests.add(1, {
|
|
180
|
+
...stripErrorType(attrs),
|
|
181
|
+
[FRUGAL_DUP_STATE]: state,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
// Without a diagnostic, a permanently-dead filter is indistinguishable
|
|
186
|
+
// from a duplicate-free workload.
|
|
187
|
+
emitLogOnce("duplicate_detection_failed", "warn", `duplicate detection failed: ${errorName(err)} — the duplicate_requests metric may be missing or incomplete`);
|
|
188
|
+
this.recordInternalError("duplicate_detection", err);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Guarded: this reads payload getters (maxTokens, tools/responseFormat via
|
|
192
|
+
// structuredOutputMode) and sits upstream of the never-sampled
|
|
193
|
+
// duplicate_requests emission — a throwing lazy payload must not take the
|
|
194
|
+
// rest of the pipeline down with it. No diagnostic of its own: the same
|
|
195
|
+
// throwing payload is reported once by recordCallShape's catch.
|
|
92
196
|
recordCapUtilization(usage, attrs) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
197
|
+
try {
|
|
198
|
+
const payload = this.ctx.requestPayload;
|
|
199
|
+
if (!payload || !nonNull(payload.maxTokens) || !nonNull(usage.outputTokens)) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
if (payload.maxTokens <= 0)
|
|
203
|
+
return;
|
|
204
|
+
const ratio = Math.min(1, usage.outputTokens / payload.maxTokens);
|
|
205
|
+
this.instruments.outputCapUtilization.record(ratio, {
|
|
206
|
+
...attrs,
|
|
207
|
+
[FRUGAL_STRUCTURED_OUTPUT_MODE]: structuredOutputMode(payload),
|
|
208
|
+
});
|
|
96
209
|
}
|
|
97
|
-
|
|
210
|
+
catch {
|
|
98
211
|
return;
|
|
99
|
-
|
|
100
|
-
this.instruments.outputCapUtilization.record(ratio, {
|
|
101
|
-
...attrs,
|
|
102
|
-
[FRUGAL_STRUCTURED_OUTPUT_MODE]: structuredOutputMode(payload),
|
|
103
|
-
});
|
|
212
|
+
}
|
|
104
213
|
}
|
|
105
214
|
maybeAnalyze(attrs) {
|
|
106
215
|
const payload = this.ctx.requestPayload;
|
|
@@ -116,12 +225,12 @@ export class CallEmitter {
|
|
|
116
225
|
catch {
|
|
117
226
|
return;
|
|
118
227
|
}
|
|
119
|
-
if (nonNull(result.historyDepth)) {
|
|
120
|
-
this.instruments.historyDepth.record(result.historyDepth, attrs);
|
|
121
|
-
}
|
|
122
228
|
if (nonNull(result.fewShotCount)) {
|
|
123
229
|
this.instruments.fewShotCount.record(result.fewShotCount, attrs);
|
|
124
230
|
}
|
|
231
|
+
if (nonNull(result.fewShotTokens)) {
|
|
232
|
+
this.instruments.fewShotTokens.record(result.fewShotTokens, attrs);
|
|
233
|
+
}
|
|
125
234
|
if (nonNull(result.noiseRatio)) {
|
|
126
235
|
this.instruments.noiseRatio.record(result.noiseRatio, attrs);
|
|
127
236
|
}
|
|
@@ -163,13 +272,17 @@ export class CallEmitter {
|
|
|
163
272
|
attrs[FRUGAL_ERROR_TYPE] = errorName(err);
|
|
164
273
|
const duration = nowSeconds() - this.startSec;
|
|
165
274
|
this.instruments.operationDuration.record(duration, attrs);
|
|
166
|
-
|
|
275
|
+
// errors.add first: the error counter must not be lost if the labeled
|
|
276
|
+
// calls.add path fails.
|
|
167
277
|
this.instruments.errors.add(1, attrs);
|
|
278
|
+
this.instruments.calls.add(1, this.recordCallShape(attrs).callAttrs);
|
|
279
|
+
this.recordDuplicate(attrs);
|
|
168
280
|
}
|
|
169
281
|
baseAttrs() {
|
|
170
282
|
const attrs = {
|
|
171
|
-
[GEN_AI_SYSTEM]: this.
|
|
172
|
-
[
|
|
283
|
+
[GEN_AI_SYSTEM]: this.provider.system,
|
|
284
|
+
[GEN_AI_PROVIDER_NAME]: this.provider.providerName,
|
|
285
|
+
[GEN_AI_OPERATION_NAME]: this.operation,
|
|
173
286
|
[GEN_AI_REQUEST_MODEL]: this.ctx.requestModel,
|
|
174
287
|
[FRUGAL_PROJECT_ID]: this.config.projectId,
|
|
175
288
|
[FRUGAL_CALLER_FILE]: this.caller.file,
|
|
@@ -179,12 +292,119 @@ export class CallEmitter {
|
|
|
179
292
|
if (this.config.customerId) {
|
|
180
293
|
attrs[FRUGAL_CUSTOMER_ID] = this.config.customerId;
|
|
181
294
|
}
|
|
295
|
+
// In baseAttrs (not stamped per-instrument) because the contract is "every
|
|
296
|
+
// metric of the call, without exception" — new instruments added later
|
|
297
|
+
// inherit it automatically instead of each needing a stamp.
|
|
298
|
+
const customLabel = resolveCustomLabel(this.ctx, this.config);
|
|
299
|
+
if (customLabel !== null) {
|
|
300
|
+
attrs[FRUGAL_CUSTOM_LABEL] = customLabel;
|
|
301
|
+
}
|
|
182
302
|
return attrs;
|
|
183
303
|
}
|
|
184
304
|
}
|
|
185
305
|
function nonNull(v) {
|
|
186
306
|
return v !== null && v !== undefined;
|
|
187
307
|
}
|
|
308
|
+
function batchedBaseAttrs(config, system, operation, requestModel, caller) {
|
|
309
|
+
const provider = normalizeProvider(system, config.customProviders);
|
|
310
|
+
const attrs = {
|
|
311
|
+
[GEN_AI_SYSTEM]: provider.system,
|
|
312
|
+
[GEN_AI_PROVIDER_NAME]: provider.providerName,
|
|
313
|
+
[GEN_AI_OPERATION_NAME]: normalizeOperation(operation),
|
|
314
|
+
[GEN_AI_REQUEST_MODEL]: requestModel,
|
|
315
|
+
[FRUGAL_PROJECT_ID]: config.projectId,
|
|
316
|
+
[FRUGAL_CALLER_FILE]: caller.file,
|
|
317
|
+
[FRUGAL_CALLER_FUNCTION]: caller.function,
|
|
318
|
+
[FRUGAL_BATCHED]: true,
|
|
319
|
+
};
|
|
320
|
+
if (config.customerId) {
|
|
321
|
+
attrs[FRUGAL_CUSTOMER_ID] = config.customerId;
|
|
322
|
+
}
|
|
323
|
+
return attrs;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Record the calls a batch submission carries — one counter increment per
|
|
327
|
+
* (model, count) group so mixed-model batches attribute per model. Duration
|
|
328
|
+
* and error accounting for the submitting HTTP call stay on its CallEmitter;
|
|
329
|
+
* this only records the fanned-out request volume.
|
|
330
|
+
*/
|
|
331
|
+
export function recordBatchedCalls(config, base, caller, groups) {
|
|
332
|
+
const instruments = getInstruments(config);
|
|
333
|
+
for (const group of groups) {
|
|
334
|
+
if (!(group.count > 0))
|
|
335
|
+
continue;
|
|
336
|
+
instruments.calls.add(group.count, batchedBaseAttrs(config, base.system, base.operation, group.requestModel, caller));
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Record one batch result entry's token usage. No calls increment — the
|
|
341
|
+
* request was already counted at submission; results only attribute spend.
|
|
342
|
+
*/
|
|
343
|
+
export function recordBatchedUsage(config, base, caller, requestModel, usage) {
|
|
344
|
+
const instruments = getInstruments(config);
|
|
345
|
+
const attrs = batchedBaseAttrs(config, base.system, base.operation, requestModel, caller);
|
|
346
|
+
if (usage.responseModel) {
|
|
347
|
+
attrs[GEN_AI_RESPONSE_MODEL] = usage.responseModel;
|
|
348
|
+
}
|
|
349
|
+
if (nonNull(usage.inputTokens)) {
|
|
350
|
+
instruments.tokenUsage.record(usage.inputTokens, {
|
|
351
|
+
...attrs,
|
|
352
|
+
[GEN_AI_TOKEN_TYPE]: TOKEN_INPUT,
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
if (nonNull(usage.outputTokens)) {
|
|
356
|
+
instruments.tokenUsage.record(usage.outputTokens, {
|
|
357
|
+
...attrs,
|
|
358
|
+
[GEN_AI_TOKEN_TYPE]: TOKEN_OUTPUT,
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
if (nonNull(usage.cacheReadTokens)) {
|
|
362
|
+
instruments.cacheReadTokens.record(usage.cacheReadTokens, attrs);
|
|
363
|
+
}
|
|
364
|
+
if (nonNull(usage.cacheWriteTokens)) {
|
|
365
|
+
instruments.cacheWriteTokens.record(usage.cacheWriteTokens, attrs);
|
|
366
|
+
}
|
|
367
|
+
if (nonNull(usage.reasoningTokens)) {
|
|
368
|
+
instruments.reasoningTokens.record(usage.reasoningTokens, attrs);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
// frugal.custom_label has a closed vocabulary: the configured allowlist
|
|
372
|
+
// (FRUGAL_CUSTOM_LABEL, hard-capped in config.ts) plus "other". The coercion
|
|
373
|
+
// lives here — at emit time, not in the track API — so a value that misses the
|
|
374
|
+
// allowlist still produces a countable "other" series instead of unbounded
|
|
375
|
+
// caller-supplied strings.
|
|
376
|
+
//
|
|
377
|
+
// Must be TOTAL: it runs inside baseAttrs(), ahead of every instrument record,
|
|
378
|
+
// and end()/fail() swallow exceptions — a throw here would silently drop all
|
|
379
|
+
// telemetry for the call. So no assumption that the value is a string: JS
|
|
380
|
+
// callers pass `unit ?? null` (absent → no label) and occasionally non-strings
|
|
381
|
+
// (→ "other", with a bounded warn-once so the misuse is discoverable, same as
|
|
382
|
+
// provider/operation typos).
|
|
383
|
+
function resolveCustomLabel(ctx, config) {
|
|
384
|
+
const raw = ctx.customLabel;
|
|
385
|
+
if (raw === undefined || raw === null)
|
|
386
|
+
return null;
|
|
387
|
+
if (typeof raw !== "string") {
|
|
388
|
+
warnInvalidOnce(`custom_label:<${typeof raw}>`, `customLabel must be a string (got ${typeof raw}) — coerced to "${CUSTOM_LABEL_OTHER}".`);
|
|
389
|
+
return CUSTOM_LABEL_OTHER;
|
|
390
|
+
}
|
|
391
|
+
const value = raw.trim();
|
|
392
|
+
if (config.customLabels.includes(value))
|
|
393
|
+
return value;
|
|
394
|
+
warnInvalidOnce(`custom_label:${value}`, `customLabel "${value}" is not in the FRUGAL_CUSTOM_LABEL allowlist — coerced to "${CUSTOM_LABEL_OTHER}". Add it to the env var (first 20 entries are honored) to attribute it.`);
|
|
395
|
+
return CUSTOM_LABEL_OTHER;
|
|
396
|
+
}
|
|
397
|
+
// history_depth and duplicate_requests are documented without an error-type
|
|
398
|
+
// label: error() adds frugal.error.type to the shared attrs before the shape/
|
|
399
|
+
// duplicate helpers run, and letting it leak onto the 2-value duplicate counter
|
|
400
|
+
// would split the series per exception class and make success/error points
|
|
401
|
+
// non-additive.
|
|
402
|
+
function stripErrorType(attrs) {
|
|
403
|
+
if (!(FRUGAL_ERROR_TYPE in attrs))
|
|
404
|
+
return attrs;
|
|
405
|
+
const { [FRUGAL_ERROR_TYPE]: _ignored, ...rest } = attrs;
|
|
406
|
+
return rest;
|
|
407
|
+
}
|
|
188
408
|
function errorName(err) {
|
|
189
409
|
if (err && typeof err === "object" && "name" in err && typeof err.name === "string") {
|
|
190
410
|
return err.name;
|
package/dist/instrument.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument.js","sourceRoot":"","sources":["../src/instrument.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"instrument.js","sourceRoot":"","sources":["../src/instrument.ts"],"names":[],"mappings":"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"}
|
package/dist/otel.d.ts
CHANGED
|
@@ -16,8 +16,10 @@ export interface Instruments {
|
|
|
16
16
|
cachePrefixStable: Counter;
|
|
17
17
|
historyDepth: Histogram;
|
|
18
18
|
fewShotCount: Histogram;
|
|
19
|
+
fewShotTokens: Histogram;
|
|
19
20
|
noiseRatio: Histogram;
|
|
20
21
|
structuredOutputHint: Counter;
|
|
22
|
+
duplicateRequests: Counter;
|
|
21
23
|
}
|
|
22
24
|
export declare function getInstruments(config: Config): Instruments;
|
|
23
25
|
export declare function buildFromReader(config: Config, reader: MetricReader): Instruments;
|
package/dist/otel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAuB,OAAO,EAAE,SAAS,EAAS,MAAM,oBAAoB,CAAC;AAQzF,OAAO,EAGL,aAAa,EAEb,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACxB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAuB,OAAO,EAAE,SAAS,EAAS,MAAM,oBAAoB,CAAC;AAQzF,OAAO,EAGL,aAAa,EAEb,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACxB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AA2B1C,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,UAAU,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,eAAe,EAAE,SAAS,CAAC;IAC3B,gBAAgB,EAAE,SAAS,CAAC;IAC5B,eAAe,EAAE,SAAS,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,oBAAoB,EAAE,SAAS,CAAC;IAChC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,SAAS,CAAC;IACxB,YAAY,EAAE,SAAS,CAAC;IACxB,aAAa,EAAE,SAAS,CAAC;IACzB,UAAU,EAAE,SAAS,CAAC;IACtB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAID,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAS1D;AAYD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,WAAW,CA0HjF;AAsED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,kBAAkB,GAC3B,kBAAkB,CA8BpB;AAED;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAGlD;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAKrD;AAeD,kEAAkE;AAClE,wBAAgB,wBAAwB,IAAI,IAAI,CAO/C;AAED,kFAAkF;AAClF,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAErE"}
|
package/dist/otel.js
CHANGED
|
@@ -13,7 +13,7 @@ import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-proto";
|
|
|
13
13
|
import { resourceFromAttributes } from "@opentelemetry/resources";
|
|
14
14
|
import { AggregationType, ConsoleMetricExporter, MeterProvider, PeriodicExportingMetricReader, } from "@opentelemetry/sdk-metrics";
|
|
15
15
|
import { emitLog } from "./debug.js";
|
|
16
|
-
import { FRUGAL_COMPONENT, FRUGAL_CUSTOMER_ID, FRUGAL_PROJECT_ID, METRIC_CACHE_PREFIX_STABLE, METRIC_CACHE_READ_TOKENS, METRIC_CACHE_WRITE_TOKENS, METRIC_CALLS, METRIC_ERRORS, METRIC_FEW_SHOT_COUNT, METRIC_HISTORY_DEPTH, METRIC_NOISE_RATIO, METRIC_OPERATION_DURATION, METRIC_INTERNAL_ERRORS, METRIC_OUTPUT_CAP_UTILIZATION, METRIC_REASONING_TOKENS, METRIC_STRUCTURED_OUTPUT_HINT, METRIC_TOKEN_USAGE, } from "./semconv.js";
|
|
16
|
+
import { FRUGAL_COMPONENT, FRUGAL_CUSTOMER_ID, FRUGAL_PROJECT_ID, METRIC_CACHE_PREFIX_STABLE, METRIC_CACHE_READ_TOKENS, METRIC_CACHE_WRITE_TOKENS, METRIC_CALLS, METRIC_DUPLICATE_REQUESTS, METRIC_ERRORS, METRIC_FEW_SHOT_COUNT, METRIC_FEW_SHOT_TOKENS, METRIC_HISTORY_DEPTH, METRIC_NOISE_RATIO, METRIC_OPERATION_DURATION, METRIC_INTERNAL_ERRORS, METRIC_OUTPUT_CAP_UTILIZATION, METRIC_REASONING_TOKENS, METRIC_STRUCTURED_OUTPUT_HINT, METRIC_TOKEN_USAGE, } from "./semconv.js";
|
|
17
17
|
const INSTRUMENTATION_NAME = "frugal-metrics";
|
|
18
18
|
const INSTRUMENTATION_VERSION = "0.1.0";
|
|
19
19
|
let cached = null;
|
|
@@ -131,6 +131,10 @@ export function buildFromReader(config, reader) {
|
|
|
131
131
|
unit: "{example}",
|
|
132
132
|
description: "Count of consecutive user/assistant pairs preceding the final user message in single-turn calls.",
|
|
133
133
|
}),
|
|
134
|
+
fewShotTokens: meter.createHistogram(METRIC_FEW_SHOT_TOKENS, {
|
|
135
|
+
unit: "{token}",
|
|
136
|
+
description: "Approximate token size of the few-shot example block (the user/assistant pairs counted by few_shot_count).",
|
|
137
|
+
}),
|
|
134
138
|
noiseRatio: meter.createHistogram(METRIC_NOISE_RATIO, {
|
|
135
139
|
unit: "1",
|
|
136
140
|
description: "Ratio of noise characters (HTML tags, base64 runs, large whitespace) to total input characters.",
|
|
@@ -139,6 +143,10 @@ export function buildFromReader(config, reader) {
|
|
|
139
143
|
unit: "{call}",
|
|
140
144
|
description: "Count of calls whose prompt asks for structured output in prose without using tools or response_format.",
|
|
141
145
|
}),
|
|
146
|
+
duplicateRequests: meter.createCounter(METRIC_DUPLICATE_REQUESTS, {
|
|
147
|
+
unit: "{call}",
|
|
148
|
+
description: "Per-call request-duplication state (first_seen | repeat_seen) from a time-windowed signature filter.",
|
|
149
|
+
}),
|
|
142
150
|
};
|
|
143
151
|
return applyComponentFanout(raw, config.components);
|
|
144
152
|
}
|
|
@@ -148,11 +156,15 @@ export function buildFromReader(config, reader) {
|
|
|
148
156
|
// whole project (component absent) or split by component, with no double-count
|
|
149
157
|
// of the project total. internalErrors is excluded — it's a process-level
|
|
150
158
|
// diagnostic, not per-component attributable.
|
|
159
|
+
// Every Instruments field is listed explicitly (no spread) so adding an
|
|
160
|
+
// instrument without deciding its fanout behavior is a compile error, not a
|
|
161
|
+
// silently missing per-component series.
|
|
151
162
|
function applyComponentFanout(raw, components) {
|
|
152
163
|
if (components.length === 0)
|
|
153
164
|
return raw;
|
|
154
165
|
return {
|
|
155
|
-
|
|
166
|
+
meterProvider: raw.meterProvider,
|
|
167
|
+
reader: raw.reader,
|
|
156
168
|
operationDuration: fanoutHistogram(raw.operationDuration, components),
|
|
157
169
|
tokenUsage: fanoutHistogram(raw.tokenUsage, components),
|
|
158
170
|
calls: fanoutCounter(raw.calls, components),
|
|
@@ -160,12 +172,15 @@ function applyComponentFanout(raw, components) {
|
|
|
160
172
|
cacheWriteTokens: fanoutHistogram(raw.cacheWriteTokens, components),
|
|
161
173
|
reasoningTokens: fanoutHistogram(raw.reasoningTokens, components),
|
|
162
174
|
errors: fanoutCounter(raw.errors, components),
|
|
175
|
+
internalErrors: raw.internalErrors,
|
|
163
176
|
outputCapUtilization: fanoutHistogram(raw.outputCapUtilization, components),
|
|
164
177
|
cachePrefixStable: fanoutCounter(raw.cachePrefixStable, components),
|
|
165
178
|
historyDepth: fanoutHistogram(raw.historyDepth, components),
|
|
166
179
|
fewShotCount: fanoutHistogram(raw.fewShotCount, components),
|
|
180
|
+
fewShotTokens: fanoutHistogram(raw.fewShotTokens, components),
|
|
167
181
|
noiseRatio: fanoutHistogram(raw.noiseRatio, components),
|
|
168
182
|
structuredOutputHint: fanoutCounter(raw.structuredOutputHint, components),
|
|
183
|
+
duplicateRequests: fanoutCounter(raw.duplicateRequests, components),
|
|
169
184
|
};
|
|
170
185
|
}
|
|
171
186
|
function fanoutCounter(inner, components) {
|
package/dist/otel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otel.js","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,EAAE;AACF,6EAA6E;AAC7E,wEAAwE;AACxE,2EAA2E;AAC3E,YAAY;AAGZ,yEAAyE;AACzE,4EAA4E;AAC5E,4EAA4E;AAC5E,6CAA6C;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,6BAA6B,GAG9B,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,EACvB,6BAA6B,EAC7B,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAC9C,MAAM,uBAAuB,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"otel.js","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type HistoryBucket } from "./semconv.js";
|
|
1
2
|
export interface RequestPayload {
|
|
2
3
|
/** Provider-specific messages array (OpenAI chat / Anthropic messages). */
|
|
3
4
|
messages?: unknown;
|
|
@@ -9,18 +10,28 @@ export interface RequestPayload {
|
|
|
9
10
|
maxTokens?: number | null;
|
|
10
11
|
/** Optional system prompt for Anthropic (passed alongside messages). */
|
|
11
12
|
system?: unknown;
|
|
13
|
+
/**
|
|
14
|
+
* OpenAI Responses API previous_response_id. Stateful conversations carry
|
|
15
|
+
* server-side history the signature can't see, so this is folded into the
|
|
16
|
+
* duplicate signature to keep short recurring turns ("continue") from
|
|
17
|
+
* colliding across genuinely distinct conversations.
|
|
18
|
+
*/
|
|
19
|
+
previousResponseId?: string | null;
|
|
12
20
|
}
|
|
13
21
|
export interface AnalysisResult {
|
|
14
22
|
systemHash: string | null;
|
|
15
23
|
userHash: string | null;
|
|
16
24
|
toolsHash: string | null;
|
|
17
25
|
schemaHash: string | null;
|
|
18
|
-
historyDepth: number | null;
|
|
19
26
|
fewShotCount: number | null;
|
|
27
|
+
fewShotTokens: number | null;
|
|
20
28
|
noiseRatio: number | null;
|
|
21
29
|
structuredOutputHint: boolean;
|
|
22
30
|
}
|
|
23
31
|
export declare function analyzeRequest(payload: RequestPayload): AnalysisResult;
|
|
24
32
|
export declare function structuredOutputMode(payload: RequestPayload): string;
|
|
33
|
+
export declare function historyDepth(payload: RequestPayload): number | null;
|
|
34
|
+
export declare function historyBucket(n: number): HistoryBucket;
|
|
35
|
+
export declare function requestSignature(payload: RequestPayload, model: string, callSiteId: string): string | null;
|
|
25
36
|
export declare function shouldSample(callSiteId: string, sampleRate: number, nowMs?: number): boolean;
|
|
26
37
|
//# sourceMappingURL=prompt-analyzer.d.ts.map
|