@frugalco/frugal-sdk-node 0.4.0 → 0.6.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 +91 -17
- package/dist/block-hash-lru.d.ts +8 -1
- package/dist/block-hash-lru.d.ts.map +1 -1
- package/dist/block-hash-lru.js +13 -4
- package/dist/block-hash-lru.js.map +1 -1
- package/dist/config.d.ts +41 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +232 -53
- package/dist/config.js.map +1 -1
- package/dist/instrument.d.ts +3 -0
- package/dist/instrument.d.ts.map +1 -1
- package/dist/instrument.js +70 -22
- package/dist/instrument.js.map +1 -1
- package/dist/internal-errors.d.ts +16 -0
- package/dist/internal-errors.d.ts.map +1 -0
- package/dist/internal-errors.js +54 -0
- package/dist/internal-errors.js.map +1 -0
- package/dist/model-cap.d.ts +24 -0
- package/dist/model-cap.d.ts.map +1 -0
- package/dist/model-cap.js +72 -0
- package/dist/model-cap.js.map +1 -0
- package/dist/otel.d.ts +45 -4
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +233 -24
- package/dist/otel.js.map +1 -1
- package/dist/providers.d.ts +2 -1
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +36 -19
- package/dist/providers.js.map +1 -1
- package/dist/semconv.d.ts +4 -0
- package/dist/semconv.d.ts.map +1 -1
- package/dist/semconv.js +17 -2
- package/dist/semconv.js.map +1 -1
- package/dist/streams.d.ts.map +1 -1
- package/dist/streams.js +6 -5
- package/dist/streams.js.map +1 -1
- package/dist/track.d.ts +6 -3
- package/dist/track.d.ts.map +1 -1
- package/dist/track.js +22 -7
- package/dist/track.js.map +1 -1
- package/dist/wrappers/anthropic.d.ts.map +1 -1
- package/dist/wrappers/anthropic.js +11 -31
- package/dist/wrappers/anthropic.js.map +1 -1
- package/dist/wrappers/batch.d.ts.map +1 -1
- package/dist/wrappers/batch.js +14 -34
- package/dist/wrappers/batch.js.map +1 -1
- package/dist/wrappers/bedrock.d.ts.map +1 -1
- package/dist/wrappers/bedrock.js +11 -30
- package/dist/wrappers/bedrock.js.map +1 -1
- package/dist/wrappers/openai.d.ts.map +1 -1
- package/dist/wrappers/openai.js +10 -31
- package/dist/wrappers/openai.js.map +1 -1
- package/package.json +1 -1
package/dist/instrument.js
CHANGED
|
@@ -7,9 +7,11 @@
|
|
|
7
7
|
// the wrapper frame and resolveCaller, or the caller attribution will be wrong.
|
|
8
8
|
import { consumeCapHitEvent, resolveCaller, } from "./caller.js";
|
|
9
9
|
import { emitLogOnce } from "./debug.js";
|
|
10
|
+
import { errorName, recordEmissionFailure } from "./internal-errors.js";
|
|
11
|
+
import { applyModelCap, consumeModelCapHitEvent } from "./model-cap.js";
|
|
10
12
|
import { getInstruments } from "./otel.js";
|
|
11
13
|
import { getSharedBlockHashLRU } from "./block-hash-lru.js";
|
|
12
|
-
import { normalizeOperation, normalizeProvider,
|
|
14
|
+
import { normalizeOperation, normalizeProvider, warnCustomLabelOnce, } from "./providers.js";
|
|
13
15
|
import { analyzeRequest, historyBucket, historyDepth, requestSignature, shouldSample, structuredOutputMode, } from "./prompt-analyzer.js";
|
|
14
16
|
import { getSharedDuplicateFilter } from "./duplicate-filter.js";
|
|
15
17
|
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";
|
|
@@ -69,13 +71,27 @@ export class CallEmitter {
|
|
|
69
71
|
this.provider = provider;
|
|
70
72
|
this.operation = operation;
|
|
71
73
|
}
|
|
74
|
+
/** Count and log an emission failure caught off the wrapper's own path. */
|
|
75
|
+
recordEmissionFailure(err) {
|
|
76
|
+
recordEmissionFailure(this.config, err);
|
|
77
|
+
}
|
|
72
78
|
success(usage) {
|
|
73
79
|
if (this.finalized)
|
|
74
80
|
return;
|
|
75
81
|
this.finalized = true;
|
|
76
82
|
const attrs = this.baseAttrs();
|
|
77
83
|
if (usage.responseModel) {
|
|
78
|
-
attrs[GEN_AI_RESPONSE_MODEL] = usage.responseModel;
|
|
84
|
+
attrs[GEN_AI_RESPONSE_MODEL] = applyModelCap(usage.responseModel, this.config.maxModels);
|
|
85
|
+
// The cap can be crossed for the FIRST time by a response model (request
|
|
86
|
+
// models already all registered), and baseAttrs() drained the event
|
|
87
|
+
// before this line ran — so drain again here or the transition would go
|
|
88
|
+
// unreported until some later call happened to build base attrs. The
|
|
89
|
+
// event is one-shot process-wide, so this cannot double-emit.
|
|
90
|
+
// The custom label is read back off attrs rather than re-resolved:
|
|
91
|
+
// resolveCustomLabel warns-invalid on the way through, and calling it
|
|
92
|
+
// twice per call would double that diagnostic path.
|
|
93
|
+
const labelAttr = attrs[FRUGAL_CUSTOM_LABEL];
|
|
94
|
+
noteModelCapHit(this.instruments, this.config, typeof labelAttr === "string" ? labelAttr : null);
|
|
79
95
|
}
|
|
80
96
|
const duration = nowSeconds() - this.startSec;
|
|
81
97
|
this.instruments.operationDuration.record(duration, attrs);
|
|
@@ -109,6 +125,9 @@ export class CallEmitter {
|
|
|
109
125
|
if (nonNull(usage.reasoningTokens)) {
|
|
110
126
|
this.instruments.reasoningTokens.record(usage.reasoningTokens, attrs);
|
|
111
127
|
}
|
|
128
|
+
if (this.operation === "invoke_agent" && isPositiveInteger(usage.agentTurns)) {
|
|
129
|
+
this.instruments.agentTurns.record(usage.agentTurns, attrs);
|
|
130
|
+
}
|
|
112
131
|
this.recordCapUtilization(usage, attrs);
|
|
113
132
|
this.recordDuplicate(attrs);
|
|
114
133
|
this.maybeAnalyze(attrs);
|
|
@@ -279,11 +298,19 @@ export class CallEmitter {
|
|
|
279
298
|
this.recordDuplicate(attrs);
|
|
280
299
|
}
|
|
281
300
|
baseAttrs() {
|
|
301
|
+
// In baseAttrs (not stamped per-instrument) because the contract is every
|
|
302
|
+
// metric this emitter records for the call — new instruments added later
|
|
303
|
+
// inherit it automatically instead of each needing a stamp. The only
|
|
304
|
+
// carve-out, the internal_errors setup_failed / emission points, is
|
|
305
|
+
// recorded outside the emitter by internal-errors.ts.
|
|
306
|
+
const customLabel = resolveCustomLabel(this.ctx, this.config);
|
|
307
|
+
const requestModel = applyModelCap(this.ctx.requestModel, this.config.maxModels);
|
|
308
|
+
noteModelCapHit(this.instruments, this.config, customLabel);
|
|
282
309
|
const attrs = {
|
|
283
310
|
[GEN_AI_SYSTEM]: this.provider.system,
|
|
284
311
|
[GEN_AI_PROVIDER_NAME]: this.provider.providerName,
|
|
285
312
|
[GEN_AI_OPERATION_NAME]: this.operation,
|
|
286
|
-
[GEN_AI_REQUEST_MODEL]:
|
|
313
|
+
[GEN_AI_REQUEST_MODEL]: requestModel,
|
|
287
314
|
[FRUGAL_PROJECT_ID]: this.config.projectId,
|
|
288
315
|
[FRUGAL_CALLER_FILE]: this.caller.file,
|
|
289
316
|
[FRUGAL_CALLER_FUNCTION]: this.caller.function,
|
|
@@ -292,10 +319,6 @@ export class CallEmitter {
|
|
|
292
319
|
if (this.config.customerId) {
|
|
293
320
|
attrs[FRUGAL_CUSTOMER_ID] = this.config.customerId;
|
|
294
321
|
}
|
|
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
322
|
if (customLabel !== null) {
|
|
300
323
|
attrs[FRUGAL_CUSTOM_LABEL] = customLabel;
|
|
301
324
|
}
|
|
@@ -305,13 +328,43 @@ export class CallEmitter {
|
|
|
305
328
|
function nonNull(v) {
|
|
306
329
|
return v !== null && v !== undefined;
|
|
307
330
|
}
|
|
308
|
-
function
|
|
331
|
+
function isPositiveInteger(v) {
|
|
332
|
+
return typeof v === "number" && Number.isInteger(v) && v > 0;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Drain the one-shot model-cap event and, when it fired, surface the transition
|
|
336
|
+
* exactly once: a debug-callback warning plus a single
|
|
337
|
+
* `frugal.gen_ai.internal_errors{stage=model_cap_hit}` point. Mirrors the
|
|
338
|
+
* cardinality_cap_hit emission in startCall (same identity attribute shape).
|
|
339
|
+
* Total — never throws into customer code.
|
|
340
|
+
*/
|
|
341
|
+
function noteModelCapHit(instruments, config, customLabel) {
|
|
342
|
+
if (!consumeModelCapHitEvent())
|
|
343
|
+
return;
|
|
344
|
+
emitLogOnce("model_cap", "warn", "model cardinality cap hit; further distinct models are attributed to an overflow bucket. Raise FRUGAL_MAX_MODELS if this is unexpected.");
|
|
345
|
+
try {
|
|
346
|
+
instruments.internalErrors.add(1, {
|
|
347
|
+
...(config.customerId ? { [FRUGAL_CUSTOMER_ID]: config.customerId } : {}),
|
|
348
|
+
[FRUGAL_PROJECT_ID]: config.projectId,
|
|
349
|
+
...(customLabel !== null ? { [FRUGAL_CUSTOM_LABEL]: customLabel } : {}),
|
|
350
|
+
"frugal.internal_error.stage": "model_cap_hit",
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
// never let our own metric emission break a customer call
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
function batchedBaseAttrs(config, instruments, system, operation, requestModel, caller) {
|
|
309
358
|
const provider = normalizeProvider(system, config.customProviders);
|
|
359
|
+
// The batch path carries no custom label (wrapper-path rule), so the
|
|
360
|
+
// model_cap_hit point is emitted with identity attributes only.
|
|
361
|
+
const cappedModel = applyModelCap(requestModel, config.maxModels);
|
|
362
|
+
noteModelCapHit(instruments, config, null);
|
|
310
363
|
const attrs = {
|
|
311
364
|
[GEN_AI_SYSTEM]: provider.system,
|
|
312
365
|
[GEN_AI_PROVIDER_NAME]: provider.providerName,
|
|
313
366
|
[GEN_AI_OPERATION_NAME]: normalizeOperation(operation),
|
|
314
|
-
[GEN_AI_REQUEST_MODEL]:
|
|
367
|
+
[GEN_AI_REQUEST_MODEL]: cappedModel,
|
|
315
368
|
[FRUGAL_PROJECT_ID]: config.projectId,
|
|
316
369
|
[FRUGAL_CALLER_FILE]: caller.file,
|
|
317
370
|
[FRUGAL_CALLER_FUNCTION]: caller.function,
|
|
@@ -333,7 +386,7 @@ export function recordBatchedCalls(config, base, caller, groups) {
|
|
|
333
386
|
for (const group of groups) {
|
|
334
387
|
if (!(group.count > 0))
|
|
335
388
|
continue;
|
|
336
|
-
instruments.calls.add(group.count, batchedBaseAttrs(config, base.system, base.operation, group.requestModel, caller));
|
|
389
|
+
instruments.calls.add(group.count, batchedBaseAttrs(config, instruments, base.system, base.operation, group.requestModel, caller));
|
|
337
390
|
}
|
|
338
391
|
}
|
|
339
392
|
/**
|
|
@@ -342,9 +395,12 @@ export function recordBatchedCalls(config, base, caller, groups) {
|
|
|
342
395
|
*/
|
|
343
396
|
export function recordBatchedUsage(config, base, caller, requestModel, usage) {
|
|
344
397
|
const instruments = getInstruments(config);
|
|
345
|
-
const attrs = batchedBaseAttrs(config, base.system, base.operation, requestModel, caller);
|
|
398
|
+
const attrs = batchedBaseAttrs(config, instruments, base.system, base.operation, requestModel, caller);
|
|
346
399
|
if (usage.responseModel) {
|
|
347
|
-
attrs[GEN_AI_RESPONSE_MODEL] = usage.responseModel;
|
|
400
|
+
attrs[GEN_AI_RESPONSE_MODEL] = applyModelCap(usage.responseModel, config.maxModels);
|
|
401
|
+
// Same reason as CallEmitter.success(): a cap first crossed by a response
|
|
402
|
+
// model must still report. null custom label — wrapper-path rule.
|
|
403
|
+
noteModelCapHit(instruments, config, null);
|
|
348
404
|
}
|
|
349
405
|
if (nonNull(usage.inputTokens)) {
|
|
350
406
|
instruments.tokenUsage.record(usage.inputTokens, {
|
|
@@ -385,13 +441,13 @@ function resolveCustomLabel(ctx, config) {
|
|
|
385
441
|
if (raw === undefined || raw === null)
|
|
386
442
|
return null;
|
|
387
443
|
if (typeof raw !== "string") {
|
|
388
|
-
|
|
444
|
+
warnCustomLabelOnce(`custom_label:<${typeof raw}>`, `customLabel must be a string (got ${typeof raw}) — coerced to "${CUSTOM_LABEL_OTHER}".`);
|
|
389
445
|
return CUSTOM_LABEL_OTHER;
|
|
390
446
|
}
|
|
391
447
|
const value = raw.trim();
|
|
392
448
|
if (config.customLabels.includes(value))
|
|
393
449
|
return value;
|
|
394
|
-
|
|
450
|
+
warnCustomLabelOnce(`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
451
|
return CUSTOM_LABEL_OTHER;
|
|
396
452
|
}
|
|
397
453
|
// history_depth and duplicate_requests are documented without an error-type
|
|
@@ -405,12 +461,4 @@ function stripErrorType(attrs) {
|
|
|
405
461
|
const { [FRUGAL_ERROR_TYPE]: _ignored, ...rest } = attrs;
|
|
406
462
|
return rest;
|
|
407
463
|
}
|
|
408
|
-
function errorName(err) {
|
|
409
|
-
if (err && typeof err === "object" && "name" in err && typeof err.name === "string") {
|
|
410
|
-
return err.name;
|
|
411
|
-
}
|
|
412
|
-
if (err instanceof Error)
|
|
413
|
-
return err.constructor.name;
|
|
414
|
-
return "UnknownError";
|
|
415
|
-
}
|
|
416
464
|
//# sourceMappingURL=instrument.js.map
|
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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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Config } from "./config.js";
|
|
2
|
+
/** `err.name` when it is a string, else the constructor name, else "UnknownError". */
|
|
3
|
+
export declare function errorName(err: unknown): string;
|
|
4
|
+
/**
|
|
5
|
+
* Add one frugal.gen_ai.internal_errors point. Total: never throws, and a null
|
|
6
|
+
* config (SDK disabled or config not yet loaded) records nothing.
|
|
7
|
+
*/
|
|
8
|
+
export declare function recordInternalErrorPoint(config: Config | null, stage: string, err: unknown): void;
|
|
9
|
+
/**
|
|
10
|
+
* Report an emission failure that happened off the caller's path (a stream
|
|
11
|
+
* finalize, the batch results tee): one error log per process under the shared
|
|
12
|
+
* `emission_failed` key plus an internal_errors{stage=emission} point. Total:
|
|
13
|
+
* never throws into the customer's code.
|
|
14
|
+
*/
|
|
15
|
+
export declare function recordEmissionFailure(config: Config | null, err: unknown): void;
|
|
16
|
+
//# sourceMappingURL=internal-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-errors.d.ts","sourceRoot":"","sources":["../src/internal-errors.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAK1C,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAM9C;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,OAAO,GACX,IAAI,CAaN;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAW/E"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// Shared self-observability point for the SDK's own failures.
|
|
2
|
+
//
|
|
3
|
+
// The manual track API and the provider wrappers both report their structural
|
|
4
|
+
// failures (setup_failed, emission, ...) on frugal.gen_ai.internal_errors with
|
|
5
|
+
// the SAME identity attribute set the Python and Go SDKs use: customer (when
|
|
6
|
+
// set), project, stage and error type — no custom label, no caller labels.
|
|
7
|
+
import { emitLogOnce } from "./debug.js";
|
|
8
|
+
import { getInstruments } from "./otel.js";
|
|
9
|
+
import { FRUGAL_CUSTOMER_ID, FRUGAL_PROJECT_ID } from "./semconv.js";
|
|
10
|
+
/** `err.name` when it is a string, else the constructor name, else "UnknownError". */
|
|
11
|
+
export function errorName(err) {
|
|
12
|
+
if (err && typeof err === "object" && "name" in err && typeof err.name === "string") {
|
|
13
|
+
return err.name;
|
|
14
|
+
}
|
|
15
|
+
if (err instanceof Error)
|
|
16
|
+
return err.constructor.name;
|
|
17
|
+
return "UnknownError";
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Add one frugal.gen_ai.internal_errors point. Total: never throws, and a null
|
|
21
|
+
* config (SDK disabled or config not yet loaded) records nothing.
|
|
22
|
+
*/
|
|
23
|
+
export function recordInternalErrorPoint(config, stage, err) {
|
|
24
|
+
try {
|
|
25
|
+
if (!config)
|
|
26
|
+
return;
|
|
27
|
+
const instruments = getInstruments(config);
|
|
28
|
+
instruments.internalErrors.add(1, {
|
|
29
|
+
...(config.customerId ? { [FRUGAL_CUSTOMER_ID]: config.customerId } : {}),
|
|
30
|
+
[FRUGAL_PROJECT_ID]: config.projectId,
|
|
31
|
+
"frugal.internal_error.stage": stage,
|
|
32
|
+
"frugal.internal_error.type": errorName(err),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// swallow — our own diagnostics must never break a customer call
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Report an emission failure that happened off the caller's path (a stream
|
|
41
|
+
* finalize, the batch results tee): one error log per process under the shared
|
|
42
|
+
* `emission_failed` key plus an internal_errors{stage=emission} point. Total:
|
|
43
|
+
* never throws into the customer's code.
|
|
44
|
+
*/
|
|
45
|
+
export function recordEmissionFailure(config, err) {
|
|
46
|
+
try {
|
|
47
|
+
emitLogOnce("emission_failed", "error", `metric emission failed: ${errorName(err)}`);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// swallow — our own diagnostics must never break a customer call
|
|
51
|
+
}
|
|
52
|
+
recordInternalErrorPoint(config, "emission", err);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=internal-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-errors.js","sourceRoot":"","sources":["../src/internal-errors.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,6EAA6E;AAC7E,2EAA2E;AAG3E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAErE,sFAAsF;AACtF,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpF,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;IACtD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAqB,EACrB,KAAa,EACb,GAAY;IAEZ,IAAI,CAAC;QACH,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE;YAChC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,SAAS;YACrC,6BAA6B,EAAE,KAAK;YACpC,4BAA4B,EAAE,SAAS,CAAC,GAAG,CAAC;SAC7C,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAqB,EAAE,GAAY;IACvE,IAAI,CAAC;QACH,WAAW,CACT,iBAAiB,EACjB,OAAO,EACP,2BAA2B,SAAS,CAAC,GAAG,CAAC,EAAE,CAC5C,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;IACD,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Register `model` and return it, or return the `<overflow>` sentinel once the
|
|
3
|
+
* registry is full. `maxModels <= 0` disables the cap. Total: non-string and
|
|
4
|
+
* empty input is returned unchanged rather than throwing — this runs on the
|
|
5
|
+
* hot path ahead of every instrument record.
|
|
6
|
+
*
|
|
7
|
+
* The SDK's own sentinels pass through without consuming a slot: `<unknown>`
|
|
8
|
+
* (every wrapper's fallback when the model can't be read off the request) is
|
|
9
|
+
* one value however many call sites produce it, so charging it a slot would
|
|
10
|
+
* evict a real model for nothing; and `<overflow>` is the cap's own output —
|
|
11
|
+
* re-registering it would let the sentinel occupy a slot in the registry that
|
|
12
|
+
* decides what becomes the sentinel.
|
|
13
|
+
*/
|
|
14
|
+
export declare function applyModelCap(model: string, maxModels: number): string;
|
|
15
|
+
/**
|
|
16
|
+
* Returns true iff the model cap was crossed since the last call — exactly once
|
|
17
|
+
* per process, on the first consume after the cap was first hit. The instrument
|
|
18
|
+
* layer drains it so the transition surfaces as a single
|
|
19
|
+
* `frugal.gen_ai.internal_errors{stage=model_cap_hit}` point.
|
|
20
|
+
*/
|
|
21
|
+
export declare function consumeModelCapHitEvent(): boolean;
|
|
22
|
+
/** Test-only hook — clear the registry and re-arm the one-shot event. */
|
|
23
|
+
export declare function resetModelCapForTests(): void;
|
|
24
|
+
//# sourceMappingURL=model-cap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-cap.d.ts","sourceRoot":"","sources":["../src/model-cap.ts"],"names":[],"mappings":"AAuBA;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CActE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAMjD;AAED,yEAAyE;AACzE,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// Process-wide cardinality cap for the model axis.
|
|
2
|
+
//
|
|
3
|
+
// `gen_ai.request.model` and `gen_ai.response.model` are free-form provider
|
|
4
|
+
// strings: a deployment that mints model ids per experiment (or reads them from
|
|
5
|
+
// user input) multiplies every instrument's series count without bound. One
|
|
6
|
+
// first-come-first-served registry, shared by BOTH labels, keeps the axis
|
|
7
|
+
// bounded: the first N distinct model strings keep their names, everything past
|
|
8
|
+
// them collapses into the `<overflow>` sentinel.
|
|
9
|
+
//
|
|
10
|
+
// Deliberately one registry for both labels, not two: request and response
|
|
11
|
+
// models are overwhelmingly the same strings, and a shared budget is what the
|
|
12
|
+
// server-side series count actually cares about.
|
|
13
|
+
//
|
|
14
|
+
// Mirrors caller.ts's applyCap / consumeCapHitEvent / resetCachesForTests
|
|
15
|
+
// shape, including the one-shot "cap was just crossed" event the instrument
|
|
16
|
+
// layer drains to emit a single internal_errors point.
|
|
17
|
+
import { OVERFLOW, UNKNOWN } from "./semconv.js";
|
|
18
|
+
const seenModels = new Set();
|
|
19
|
+
let capHitNotified = false;
|
|
20
|
+
let capHitPending = false;
|
|
21
|
+
/**
|
|
22
|
+
* Register `model` and return it, or return the `<overflow>` sentinel once the
|
|
23
|
+
* registry is full. `maxModels <= 0` disables the cap. Total: non-string and
|
|
24
|
+
* empty input is returned unchanged rather than throwing — this runs on the
|
|
25
|
+
* hot path ahead of every instrument record.
|
|
26
|
+
*
|
|
27
|
+
* The SDK's own sentinels pass through without consuming a slot: `<unknown>`
|
|
28
|
+
* (every wrapper's fallback when the model can't be read off the request) is
|
|
29
|
+
* one value however many call sites produce it, so charging it a slot would
|
|
30
|
+
* evict a real model for nothing; and `<overflow>` is the cap's own output —
|
|
31
|
+
* re-registering it would let the sentinel occupy a slot in the registry that
|
|
32
|
+
* decides what becomes the sentinel.
|
|
33
|
+
*/
|
|
34
|
+
export function applyModelCap(model, maxModels) {
|
|
35
|
+
if (typeof model !== "string" || model.length === 0)
|
|
36
|
+
return model;
|
|
37
|
+
if (model === UNKNOWN || model === OVERFLOW)
|
|
38
|
+
return model;
|
|
39
|
+
if (maxModels <= 0)
|
|
40
|
+
return model;
|
|
41
|
+
if (seenModels.has(model))
|
|
42
|
+
return model;
|
|
43
|
+
if (seenModels.size < maxModels) {
|
|
44
|
+
seenModels.add(model);
|
|
45
|
+
return model;
|
|
46
|
+
}
|
|
47
|
+
if (!capHitNotified) {
|
|
48
|
+
capHitNotified = true;
|
|
49
|
+
capHitPending = true;
|
|
50
|
+
}
|
|
51
|
+
return OVERFLOW;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Returns true iff the model cap was crossed since the last call — exactly once
|
|
55
|
+
* per process, on the first consume after the cap was first hit. The instrument
|
|
56
|
+
* layer drains it so the transition surfaces as a single
|
|
57
|
+
* `frugal.gen_ai.internal_errors{stage=model_cap_hit}` point.
|
|
58
|
+
*/
|
|
59
|
+
export function consumeModelCapHitEvent() {
|
|
60
|
+
if (capHitPending) {
|
|
61
|
+
capHitPending = false;
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
/** Test-only hook — clear the registry and re-arm the one-shot event. */
|
|
67
|
+
export function resetModelCapForTests() {
|
|
68
|
+
seenModels.clear();
|
|
69
|
+
capHitNotified = false;
|
|
70
|
+
capHitPending = false;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=model-cap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-cap.js","sourceRoot":"","sources":["../src/model-cap.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,4EAA4E;AAC5E,0EAA0E;AAC1E,gFAAgF;AAChF,iDAAiD;AACjD,EAAE;AACF,2EAA2E;AAC3E,8EAA8E;AAC9E,iDAAiD;AACjD,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;AACrC,IAAI,cAAc,GAAG,KAAK,CAAC;AAC3B,IAAI,aAAa,GAAG,KAAK,CAAC;AAE1B;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,SAAiB;IAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAClE,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC1D,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,UAAU,CAAC,IAAI,GAAG,SAAS,EAAE,CAAC;QAChC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,cAAc,GAAG,IAAI,CAAC;QACtB,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB;IACrC,IAAI,aAAa,EAAE,CAAC;QAClB,aAAa,GAAG,KAAK,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,qBAAqB;IACnC,UAAU,CAAC,KAAK,EAAE,CAAC;IACnB,cAAc,GAAG,KAAK,CAAC;IACvB,aAAa,GAAG,KAAK,CAAC;AACxB,CAAC"}
|
package/dist/otel.d.ts
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import type { Counter, Histogram } from "@opentelemetry/api";
|
|
2
|
-
import { MeterProvider, type MetricReader, type PushMetricExporter } from "@opentelemetry/sdk-metrics";
|
|
3
|
-
import type
|
|
2
|
+
import { MeterProvider, type MetricReader, type PushMetricExporter, type ResourceMetrics } from "@opentelemetry/sdk-metrics";
|
|
3
|
+
import { parseHeaders, type Config } from "./config.js";
|
|
4
|
+
export { parseHeaders };
|
|
5
|
+
export declare const UNLIMITED_SERIES_PER_INSTRUMENT = 1000000;
|
|
6
|
+
/**
|
|
7
|
+
* Attribution identity for diagnostics emitted from inside the exporter
|
|
8
|
+
* wrapper. The wrapper is built before any instrument exists, so it cannot
|
|
9
|
+
* reach a Config through the module `cached` handle — the identity is passed
|
|
10
|
+
* in at construction instead.
|
|
11
|
+
*/
|
|
12
|
+
export interface ExporterIdentity {
|
|
13
|
+
projectId: string;
|
|
14
|
+
customerId: string | null;
|
|
15
|
+
}
|
|
4
16
|
export interface Instruments {
|
|
5
17
|
meterProvider: MeterProvider;
|
|
6
18
|
reader: MetricReader;
|
|
@@ -10,6 +22,7 @@ export interface Instruments {
|
|
|
10
22
|
cacheReadTokens: Histogram;
|
|
11
23
|
cacheWriteTokens: Histogram;
|
|
12
24
|
reasoningTokens: Histogram;
|
|
25
|
+
agentTurns: Histogram;
|
|
13
26
|
errors: Counter;
|
|
14
27
|
internalErrors: Counter;
|
|
15
28
|
outputCapUtilization: Histogram;
|
|
@@ -23,6 +36,17 @@ export interface Instruments {
|
|
|
23
36
|
}
|
|
24
37
|
export declare function getInstruments(config: Config): Instruments;
|
|
25
38
|
export declare function buildFromReader(config: Config, reader: MetricReader): Instruments;
|
|
39
|
+
export declare function buildReader(config: Config): MetricReader;
|
|
40
|
+
/**
|
|
41
|
+
* Walk exported metrics for data points OTel merged into its per-instrument
|
|
42
|
+
* overflow bucket, and return the de-duplicated, order-stable list of
|
|
43
|
+
* instrument names affected.
|
|
44
|
+
*
|
|
45
|
+
* Pure and total: runs on every export tick against SDK-shaped data we do not
|
|
46
|
+
* own, so every level is guarded and any surprise yields whatever was collected
|
|
47
|
+
* so far rather than an exception on the export path.
|
|
48
|
+
*/
|
|
49
|
+
export declare function scanForOverflow(metrics: ResourceMetrics): string[];
|
|
26
50
|
/**
|
|
27
51
|
* Wrap an OTLP exporter so persistent export failures surface as a single
|
|
28
52
|
* de-duped `error` debug callback. The periodic reader retries silently
|
|
@@ -32,8 +56,12 @@ export declare function buildFromReader(config: Config, reader: MetricReader): I
|
|
|
32
56
|
* one alert per failure run, not one per export tick.
|
|
33
57
|
*
|
|
34
58
|
* Delegates every other exporter method so behavior is otherwise unchanged.
|
|
59
|
+
*
|
|
60
|
+
* `identity` stamps frugal.project_id / frugal.customer_id onto the
|
|
61
|
+
* overflow-detection points below. Optional so tests (and any caller that only
|
|
62
|
+
* wants export-failure reporting) can wrap without a Config.
|
|
35
63
|
*/
|
|
36
|
-
export declare function wrapExporterForHealth(exporter: PushMetricExporter): PushMetricExporter;
|
|
64
|
+
export declare function wrapExporterForHealth(exporter: PushMetricExporter, identity?: ExporterIdentity): PushMetricExporter;
|
|
37
65
|
/**
|
|
38
66
|
* Force an immediate export of buffered metrics. No-op when uninitialized.
|
|
39
67
|
* Never throws on uninit (callers in shutdown.ts also guard).
|
|
@@ -44,7 +72,20 @@ export declare function flushMetrics(): Promise<void>;
|
|
|
44
72
|
* cache so a later wrap call lazily rebuilds. No-op when uninitialized.
|
|
45
73
|
*/
|
|
46
74
|
export declare function shutdownMetrics(): Promise<void>;
|
|
47
|
-
/**
|
|
75
|
+
/**
|
|
76
|
+
* The OTLP exporter's header map. A header built from the API key is passed
|
|
77
|
+
* verbatim (never parsed, so a key containing `%` or `,` reaches the exporter
|
|
78
|
+
* unchanged); only an explicit FRUGAL_OTEL_EXPORTER_OTLP_HEADERS string is
|
|
79
|
+
* parsed and percent-decoded. Same rule in the Python and Go SDKs.
|
|
80
|
+
*/
|
|
81
|
+
export declare function exporterHeaders(config: Pick<Config, "otlpHeaders" | "otlpApiKey">): Record<string, string> | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* Run `build` with the host's generic OTLP header variables hidden, restoring
|
|
84
|
+
* them in `finally`. The exporter reads its env configuration synchronously in
|
|
85
|
+
* its constructor, and JS is single-threaded, so no other code observes the gap.
|
|
86
|
+
*/
|
|
87
|
+
export declare function withoutHostOtlpHeaders<T>(build: () => T): T;
|
|
88
|
+
/** Test-only hook — wipe the cached instruments (and any cached failure). */
|
|
48
89
|
export declare function resetInstrumentsForTests(): void;
|
|
49
90
|
/** Test-only hook — install pre-built instruments (e.g. with InMemory reader). */
|
|
50
91
|
export declare function setInstrumentsForTests(instruments: Instruments): void;
|
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,
|
|
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,EACvB,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,CAAC;AAsCxB,eAAO,MAAM,+BAA+B,UAAY,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,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,UAAU,EAAE,SAAS,CAAC;IACtB,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;AAWD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAW1D;AA2BD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,WAAW,CA8IjF;AA0DD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CA4BxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,EAAE,CA6BlE;AAWD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,kBAAkB,CAmFpB;AAED;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAGlD;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAKrD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CAAC,GACjD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAGpC;AAWD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAc3D;AAED,6EAA6E;AAC7E,wBAAgB,wBAAwB,IAAI,IAAI,CAQ/C;AAED,kFAAkF;AAClF,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAGrE"}
|