@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.
Files changed (53) hide show
  1. package/README.md +91 -17
  2. package/dist/block-hash-lru.d.ts +8 -1
  3. package/dist/block-hash-lru.d.ts.map +1 -1
  4. package/dist/block-hash-lru.js +13 -4
  5. package/dist/block-hash-lru.js.map +1 -1
  6. package/dist/config.d.ts +41 -0
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +232 -53
  9. package/dist/config.js.map +1 -1
  10. package/dist/instrument.d.ts +3 -0
  11. package/dist/instrument.d.ts.map +1 -1
  12. package/dist/instrument.js +70 -22
  13. package/dist/instrument.js.map +1 -1
  14. package/dist/internal-errors.d.ts +16 -0
  15. package/dist/internal-errors.d.ts.map +1 -0
  16. package/dist/internal-errors.js +54 -0
  17. package/dist/internal-errors.js.map +1 -0
  18. package/dist/model-cap.d.ts +24 -0
  19. package/dist/model-cap.d.ts.map +1 -0
  20. package/dist/model-cap.js +72 -0
  21. package/dist/model-cap.js.map +1 -0
  22. package/dist/otel.d.ts +45 -4
  23. package/dist/otel.d.ts.map +1 -1
  24. package/dist/otel.js +233 -24
  25. package/dist/otel.js.map +1 -1
  26. package/dist/providers.d.ts +2 -1
  27. package/dist/providers.d.ts.map +1 -1
  28. package/dist/providers.js +36 -19
  29. package/dist/providers.js.map +1 -1
  30. package/dist/semconv.d.ts +4 -0
  31. package/dist/semconv.d.ts.map +1 -1
  32. package/dist/semconv.js +17 -2
  33. package/dist/semconv.js.map +1 -1
  34. package/dist/streams.d.ts.map +1 -1
  35. package/dist/streams.js +6 -5
  36. package/dist/streams.js.map +1 -1
  37. package/dist/track.d.ts +6 -3
  38. package/dist/track.d.ts.map +1 -1
  39. package/dist/track.js +22 -7
  40. package/dist/track.js.map +1 -1
  41. package/dist/wrappers/anthropic.d.ts.map +1 -1
  42. package/dist/wrappers/anthropic.js +11 -31
  43. package/dist/wrappers/anthropic.js.map +1 -1
  44. package/dist/wrappers/batch.d.ts.map +1 -1
  45. package/dist/wrappers/batch.js +14 -34
  46. package/dist/wrappers/batch.js.map +1 -1
  47. package/dist/wrappers/bedrock.d.ts.map +1 -1
  48. package/dist/wrappers/bedrock.js +11 -30
  49. package/dist/wrappers/bedrock.js.map +1 -1
  50. package/dist/wrappers/openai.d.ts.map +1 -1
  51. package/dist/wrappers/openai.js +10 -31
  52. package/dist/wrappers/openai.js.map +1 -1
  53. package/package.json +1 -1
@@ -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, warnInvalidOnce, } from "./providers.js";
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]: this.ctx.requestModel,
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 batchedBaseAttrs(config, system, operation, requestModel, caller) {
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]: requestModel,
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
- warnInvalidOnce(`custom_label:<${typeof raw}>`, `customLabel must be a string (got ${typeof raw}) — coerced to "${CUSTOM_LABEL_OTHER}".`);
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
- 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.`);
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
@@ -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":"AAAA,gEAAgE;AAChE,EAAE;AACF,yEAAyE;AACzE,wEAAwE;AACxE,sEAAsE;AACtE,8EAA8E;AAC9E,gFAAgF;AAIhF,OAAO,EACL,kBAAkB,EAClB,aAAa,GAEd,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAoB,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,GAEpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,GAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,6BAA6B,EAC7B,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,YAAY,GACb,MAAM,cAAc,CAAC;AAyCtB,MAAM,UAAU,SAAS,CACvB,MAAc,EACd,GAAgB,EAChB,OAAyB,EAAE;IAE3B,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,MAAM,GACV,IAAI,CAAC,MAAM;QACX,aAAa,CAAC;YACZ,eAAe,EAAE,GAAG,CAAC,eAAe;YACpC,SAAS,EAAE,MAAM,CAAC,aAAa;YAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;SACjC,CAAC,CAAC;IACL,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACpD,IAAI,kBAAkB,EAAE,EAAE,CAAC;QACzB,WAAW,CACT,iBAAiB,EACjB,MAAM,EACN,sKAAsK,CACvK,CAAC;QACF,IAAI,CAAC;YACH,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE;gBAChC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzE,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,SAAS;gBACrC,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvE,6BAA6B,EAAE,qBAAqB;aACrD,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,0DAA0D;QAC5D,CAAC;IACH,CAAC;IACD,wEAAwE;IACxE,2EAA2E;IAC3E,iFAAiF;IACjF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpD,OAAO,IAAI,WAAW,CACpB,MAAM,EACN,GAAG,EACH,MAAM,EACN,WAAW,EACX,UAAU,EAAE,EACZ,QAAQ,EACR,SAAS,CACV,CAAC;AACJ,CAAC;AAED,SAAS,UAAU;IACjB,uDAAuD;IACvD,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAClC,CAAC;AAED,MAAM,OAAO,WAAW;IAIH;IACA;IACR;IACQ;IACA;IAEA;IACA;IAVX,SAAS,GAAG,KAAK,CAAC;IAE1B,YACmB,MAAc,EACd,GAAgB,EACxB,MAAkB,EACV,WAAwB,EACxB,QAAgB;IACjC,iDAAiD;IAChC,QAAuB,EACvB,SAAiB;QAPjB,WAAM,GAAN,MAAM,CAAQ;QACd,QAAG,GAAH,GAAG,CAAa;QACxB,WAAM,GAAN,MAAM,CAAY;QACV,gBAAW,GAAX,WAAW,CAAa;QACxB,aAAQ,GAAR,QAAQ,CAAQ;QAEhB,aAAQ,GAAR,QAAQ,CAAe;QACvB,cAAS,GAAT,SAAS,CAAQ;IACjC,CAAC;IAEJ,2EAA2E;IAC3E,qBAAqB,CAAC,GAAY;QAChC,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,KAAkB;QACxB,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACxB,KAAK,CAAC,qBAAqB,CAAC,GAAG,aAAa,CAC1C,KAAK,CAAC,aAAa,EACnB,IAAI,CAAC,MAAM,CAAC,SAAS,CACtB,CAAC;YACF,yEAAyE;YACzE,oEAAoE;YACpE,wEAAwE;YACxE,qEAAqE;YACrE,8DAA8D;YAC9D,mEAAmE;YACnE,sEAAsE;YACtE,oDAAoD;YACpD,MAAM,SAAS,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC7C,eAAe,CACb,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,MAAM,EACX,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CACjD,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE3D,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAE/C,wEAAwE;QACxE,wEAAwE;QACxE,0EAA0E;QAC1E,2DAA2D;QAC3D,MAAM,UAAU,GACd,KAAK,CAAC,MAAM,KAAK,IAAI;YACnB,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,qBAAqB,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE;YACrD,CAAC,CAAC,KAAK,CAAC;QACZ,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,WAAY,EAAE;gBACrD,GAAG,UAAU;gBACb,CAAC,iBAAiB,CAAC,EAAE,WAAW;aACjC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,YAAa,EAAE;gBACtD,GAAG,UAAU;gBACb,CAAC,iBAAiB,CAAC,EAAE,YAAY;aAClC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,eAAgB,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAiB,EAAE,KAAK,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,eAAgB,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,cAAc,IAAI,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7E,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,yEAAyE;IACzE,4EAA4E;IAC5E,6EAA6E;IAC7E,6EAA6E;IAC7E,0EAA0E;IAC1E,0BAA0B;IAClB,eAAe,CAAC,KAAiB;QAIvC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;YACxC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;YACrE,CAAC;YACD,MAAM,MAAM,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5D,MAAM,SAAS,GAAe,EAAE,GAAG,KAAK,EAAE,CAAC;YAC3C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,SAAS,CAAC,qBAAqB,CAAC,GAAG,MAAM,CAAC;YAC5C,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,SAAS,CAAC,6BAA6B,CAAC,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CACT,mBAAmB,EACnB,MAAM,EACN,uCAAuC,SAAS,CAAC,GAAG,CAAC,sFAAsF,CAC5I,CAAC;YACF,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;YAC5C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,oDAAoD;IAC5C,mBAAmB,CAAC,KAAa,EAAE,GAAY;QACrD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE;gBACrC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU;oBACxB,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;oBAClD,CAAC,CAAC,EAAE,CAAC;gBACP,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;gBAC1C,GAAG,CAAC,WAAW,KAAK,IAAI;oBACtB,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAE,WAAW,EAAE;oBACxC,CAAC,CAAC,EAAE,CAAC;gBACP,6BAA6B,EAAE,KAAK;gBACpC,4BAA4B,EAAE,SAAS,CAAC,GAAG,CAAC;aAC7C,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAEO,eAAe,CAAC,KAAiB;QACvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;YACxC,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACjE,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YAC/E,IAAI,SAAS,KAAK,IAAI;gBAAE,OAAO;YAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO;YAC3B,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;gBACxC,GAAG,cAAc,CAAC,KAAK,CAAC;gBACxB,CAAC,gBAAgB,CAAC,EAAE,KAAK;aAC1B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,uEAAuE;YACvE,kCAAkC;YAClC,WAAW,CACT,4BAA4B,EAC5B,MAAM,EACN,+BAA+B,SAAS,CAAC,GAAG,CAAC,+DAA+D,CAC7G,CAAC;YACF,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,+DAA+D;IAC/D,0EAA0E;IAC1E,wEAAwE;IACxE,gEAAgE;IACxD,oBAAoB,CAAC,KAAkB,EAAE,KAAiB;QAChE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;YACxC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC5E,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,SAAU,IAAI,CAAC;gBAAE,OAAO;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,YAAa,GAAG,OAAO,CAAC,SAAU,CAAC,CAAC;YACpE,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE;gBAClD,GAAG,KAAK;gBACR,CAAC,6BAA6B,CAAC,EAAE,oBAAoB,CAAC,OAAO,CAAC;aAC/D,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,KAAiB;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;QACxC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACjE,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC;YAAE,OAAO;QAC5E,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,YAAa,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,aAAc,EAAE,KAAK,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,UAAW,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG;YACd,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;QACF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;YAChF,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC1E,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7E,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAClF,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IAEO,YAAY,CAClB,KAAiB,EACjB,KAAa,EACb,IAAmB,EACnB,IAAmB;QAEnB,yEAAyE;QACzE,0EAA0E;QAC1E,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO;QAC3C,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;YACxC,GAAG,KAAK;YACR,CAAC,YAAY,CAAC,EAAE,KAAK;YACrB,CAAC,aAAa,CAAC,EAAE,IAAI,KAAK,IAAI;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAY;QAChB,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,KAAK,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3D,sEAAsE;QACtE,wBAAwB;QACxB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;QACrE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAEO,SAAS;QACf,0EAA0E;QAC1E,yEAAyE;QACzE,qEAAqE;QACrE,oEAAoE;QACpE,sDAAsD;QACtD,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,aAAa,CAChC,IAAI,CAAC,GAAG,CAAC,YAAY,EACrB,IAAI,CAAC,MAAM,CAAC,SAAS,CACtB,CAAC;QACF,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAe;YACxB,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;YACrC,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY;YAClD,CAAC,qBAAqB,CAAC,EAAE,IAAI,CAAC,SAAS;YACvC,CAAC,oBAAoB,CAAC,EAAE,YAAY;YACpC,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAC1C,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtC,CAAC,sBAAsB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9C,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK;SAC5C,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC3B,KAAK,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QACrD,CAAC;QACD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,KAAK,CAAC,mBAAmB,CAAC,GAAG,WAAW,CAAC;QAC3C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,SAAS,OAAO,CAAC,CAA4B;IAC3C,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC;AACvC,CAAC;AAED,SAAS,iBAAiB,CAAC,CAA4B;IACrD,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CACtB,WAAwB,EACxB,MAAc,EACd,WAA0B;IAE1B,IAAI,CAAC,uBAAuB,EAAE;QAAE,OAAO;IACvC,WAAW,CACT,WAAW,EACX,MAAM,EACN,yIAAyI,CAC1I,CAAC;IACF,IAAI,CAAC;QACH,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,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,6BAA6B,EAAE,eAAe;SAC/C,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;IAC5D,CAAC;AACH,CAAC;AAiBD,SAAS,gBAAgB,CACvB,MAAc,EACd,WAAwB,EACxB,MAAc,EACd,SAAiB,EACjB,YAAoB,EACpB,MAAkB;IAElB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IACnE,qEAAqE;IACrE,gEAAgE;IAChE,MAAM,WAAW,GAAG,aAAa,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAClE,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAe;QACxB,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM;QAChC,CAAC,oBAAoB,CAAC,EAAE,QAAQ,CAAC,YAAY;QAC7C,CAAC,qBAAqB,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC;QACtD,CAAC,oBAAoB,CAAC,EAAE,WAAW;QACnC,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,SAAS;QACrC,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC,IAAI;QACjC,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC,QAAQ;QACzC,CAAC,cAAc,CAAC,EAAE,IAAI;KACvB,CAAC;IACF,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,KAAK,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAc,EACd,IAA2C,EAC3C,MAAkB,EAClB,MAAoC;IAEpC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;YAAE,SAAS;QACjC,WAAW,CAAC,KAAK,CAAC,GAAG,CACnB,KAAK,CAAC,KAAK,EACX,gBAAgB,CACd,MAAM,EACN,WAAW,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,EACd,KAAK,CAAC,YAAY,EAClB,MAAM,CACP,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAc,EACd,IAA2C,EAC3C,MAAkB,EAClB,YAAoB,EACpB,KAAkB;IAElB,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,gBAAgB,CAC5B,MAAM,EACN,WAAW,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,EACd,YAAY,EACZ,MAAM,CACP,CAAC;IACF,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,KAAK,CAAC,qBAAqB,CAAC,GAAG,aAAa,CAC1C,KAAK,CAAC,aAAa,EACnB,MAAM,CAAC,SAAS,CACjB,CAAC;QACF,0EAA0E;QAC1E,kEAAkE;QAClE,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE;YAC/C,GAAG,KAAK;YACR,CAAC,iBAAiB,CAAC,EAAE,WAAW;SACjC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE;YAChD,GAAG,KAAK;YACR,CAAC,iBAAiB,CAAC,EAAE,YAAY;SAClC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;QACnC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;QACnC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,6EAA6E;AAC7E,+EAA+E;AAC/E,2EAA2E;AAC3E,2BAA2B;AAC3B,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,0EAA0E;AAC1E,+EAA+E;AAC/E,8EAA8E;AAC9E,6BAA6B;AAC7B,SAAS,kBAAkB,CAAC,GAAgB,EAAE,MAAc;IAC1D,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC;IAC5B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,mBAAmB,CACjB,iBAAiB,OAAO,GAAG,GAAG,EAC9B,qCAAqC,OAAO,GAAG,mBAAmB,kBAAkB,IAAI,CACzF,CAAC;QACF,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtD,mBAAmB,CACjB,gBAAgB,KAAK,EAAE,EACvB,gBAAgB,KAAK,+DAA+D,kBAAkB,0EAA0E,CACjL,CAAC;IACF,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,4EAA4E;AAC5E,8EAA8E;AAC9E,gFAAgF;AAChF,2EAA2E;AAC3E,gBAAgB;AAChB,SAAS,cAAc,CAAC,KAAiB;IACvC,IAAI,CAAC,CAAC,iBAAiB,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,EAAE,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IACzD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -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 { Config } from "./config.js";
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
- /** Test-only hook — wipe the cached instruments between tests. */
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;
@@ -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;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"}
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"}