@respan/tracing 1.6.0 → 1.6.2
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 +11 -0
- package/dist/constants/index.d.ts +6 -0
- package/dist/constants/index.js +6 -0
- package/dist/constants/index.js.map +1 -1
- package/dist/contexts/span.js +2 -0
- package/dist/contexts/span.js.map +1 -1
- package/dist/processor/composite.js +2 -2
- package/dist/processor/composite.js.map +1 -1
- package/dist/utils/client.d.ts +4 -0
- package/dist/utils/client.js +3 -1
- package/dist/utils/client.js.map +1 -1
- package/dist/utils/metadata.d.ts +10 -0
- package/dist/utils/metadata.js +26 -0
- package/dist/utils/metadata.js.map +1 -1
- package/dist/utils/span.js +2 -0
- package/dist/utils/span.js.map +1 -1
- package/dist/utils/spanFactory.js +4 -3
- package/dist/utils/spanFactory.js.map +1 -1
- package/dist/utils/timeToFirstToken.d.ts +12 -0
- package/dist/utils/timeToFirstToken.js +34 -0
- package/dist/utils/timeToFirstToken.js.map +1 -0
- package/package.json +2 -3
package/README.md
CHANGED
|
@@ -362,6 +362,17 @@ await kai.withTask({ name: 'process_data' }, async () => {
|
|
|
362
362
|
- `getTracer()` - Get the tracer for manual span creation
|
|
363
363
|
- `flush()` - Force flush all pending spans
|
|
364
364
|
|
|
365
|
+
**Time to first token:** report a streaming call's time to first token as a
|
|
366
|
+
Respan param, in seconds (`ttft` is an alias). Do not put it in `metadata`:
|
|
367
|
+
metadata is not read into the TTFT column.
|
|
368
|
+
|
|
369
|
+
```typescript
|
|
370
|
+
getClient().updateCurrentSpan({ respanParams: { timeToFirstToken: 0.42 } });
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
The value must be a finite, non-negative number of seconds; anything else is
|
|
374
|
+
ignored with a warning.
|
|
375
|
+
|
|
365
376
|
### Multi-Processor Routing
|
|
366
377
|
|
|
367
378
|
Route spans to different destinations based on processor names:
|
|
@@ -10,6 +10,12 @@ export declare const LOG_PREFIX: "[Respan]";
|
|
|
10
10
|
export declare const LOG_PREFIX_DEBUG: "[Respan Debug]";
|
|
11
11
|
export declare const LOG_PREFIX_ERROR: "[Respan Error]";
|
|
12
12
|
export declare const LOG_PREFIX_WARN: "[Respan Warning]";
|
|
13
|
+
/**
|
|
14
|
+
* Bare backend column key for time to first token, in seconds. Mirrors
|
|
15
|
+
* RespanSpanAttributes.TIME_TO_FIRST_TOKEN in @respan/respan-sdk; restated here
|
|
16
|
+
* so this package works on its released @respan/respan-sdk floor.
|
|
17
|
+
*/
|
|
18
|
+
export declare const TIME_TO_FIRST_TOKEN_ATTR: "time_to_first_token";
|
|
13
19
|
/**
|
|
14
20
|
* Build a fully-qualified metadata attribute key.
|
|
15
21
|
* Single source of truth for the `respan.metadata.<key>` pattern
|
package/dist/constants/index.js
CHANGED
|
@@ -14,6 +14,12 @@ export const LOG_PREFIX = "[Respan]";
|
|
|
14
14
|
export const LOG_PREFIX_DEBUG = "[Respan Debug]";
|
|
15
15
|
export const LOG_PREFIX_ERROR = "[Respan Error]";
|
|
16
16
|
export const LOG_PREFIX_WARN = "[Respan Warning]";
|
|
17
|
+
/**
|
|
18
|
+
* Bare backend column key for time to first token, in seconds. Mirrors
|
|
19
|
+
* RespanSpanAttributes.TIME_TO_FIRST_TOKEN in @respan/respan-sdk; restated here
|
|
20
|
+
* so this package works on its released @respan/respan-sdk floor.
|
|
21
|
+
*/
|
|
22
|
+
export const TIME_TO_FIRST_TOKEN_ATTR = "time_to_first_token";
|
|
17
23
|
/**
|
|
18
24
|
* Build a fully-qualified metadata attribute key.
|
|
19
25
|
* Single source of truth for the `respan.metadata.<key>` pattern
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAA0B,CAAC;AAE9D;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAmB,CAAC;AAC9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAyB,CAAC;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAyB,CAAC;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,kBAA2B,CAAC;AAE3D;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO,GAAG,oBAAoB,CAAC,eAAe,IAAI,GAAG,EAAE,CAAC;AAC1D,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAA0B,CAAC;AAE9D;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAmB,CAAC;AAC9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAyB,CAAC;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAyB,CAAC;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,kBAA2B,CAAC;AAE3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAA8B,CAAC;AAEvE;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO,GAAG,oBAAoB,CAAC,eAAe,IAAI,GAAG,EAAE,CAAC;AAC1D,CAAC"}
|
package/dist/contexts/span.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { trace, context } from '@opentelemetry/api';
|
|
2
2
|
import { RESPAN_SPAN_ATTRIBUTES_MAP } from '@respan/respan-sdk';
|
|
3
|
+
import { setTimeToFirstTokenAttribute, timeToFirstTokenParam, } from '../utils/timeToFirstToken.js';
|
|
3
4
|
/**
|
|
4
5
|
* A context manager for setting Respan-specific attributes on the current span
|
|
5
6
|
*
|
|
@@ -15,6 +16,7 @@ export async function withRespanSpanAttributes(fn, params) {
|
|
|
15
16
|
}
|
|
16
17
|
// Set attributes first, but don't let errors block execution
|
|
17
18
|
try {
|
|
19
|
+
setTimeToFirstTokenAttribute(currentSpan, timeToFirstTokenParam(params));
|
|
18
20
|
Object.entries(params).forEach(([key, value]) => {
|
|
19
21
|
if (key in RESPAN_SPAN_ATTRIBUTES_MAP && key !== "metadata") {
|
|
20
22
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"span.js","sourceRoot":"","sources":["../../src/contexts/span.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAkB,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAgB,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"span.js","sourceRoot":"","sources":["../../src/contexts/span.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAkB,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAgB,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EACH,4BAA4B,EAC5B,qBAAqB,GACxB,MAAM,8BAA8B,CAAC;AAEtC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC1C,EAAwB,EACxB,MAA6B;IAE7B,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEpD,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAClE,OAAO,EAAE,EAAE,CAAC;IAChB,CAAC;IAED,6DAA6D;IAC7D,IAAI,CAAC;QACD,4BAA4B,CAAC,WAAW,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;QAEzE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC5C,IAAI,GAAG,IAAI,0BAA0B,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;gBAC1D,IAAI,CAAC;oBACD,WAAW,CAAC,YAAY,CAAC,0BAA0B,CAAC,GAAG,CAAC,EAAE,KAAuB,CAAC,CAAC;gBACvF,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACT,OAAO,CAAC,IAAI,CAAC,gCAAgC,0BAA0B,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;gBACnG,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBACrD,WAAW,CAAC,YAAY,CACpB,GAAG,0BAA0B,CAAC,QAAQ,IAAI,GAAG,EAAE,EAC/C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CACxB,CAAC;YACN,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SpanAttributes } from "@traceloop/ai-semantic-conventions";
|
|
2
2
|
import { RESPAN_SPAN_ATTRIBUTES_MAP, RespanSpanAttributes, } from "@respan/respan-sdk";
|
|
3
3
|
import { getEntityPath, getPropagatedAttributes } from "../utils/context.js";
|
|
4
|
-
import {
|
|
4
|
+
import { mergeCanonicalMetadataAttributes } from "../utils/metadata.js";
|
|
5
5
|
import { acquireSpanTransformerHost, releaseSpanTransformerHost, runSpanTransformersOnEnd, runSpanTransformersOnStart, } from "./transformers.js";
|
|
6
6
|
// ── LLM span name patterns ────────────────────────────────────────────────
|
|
7
7
|
// Recognized span name substrings from auto-instrumentation libraries.
|
|
@@ -55,7 +55,7 @@ export class RespanCompositeProcessor {
|
|
|
55
55
|
if (!attrKey)
|
|
56
56
|
continue;
|
|
57
57
|
if (key === "metadata") {
|
|
58
|
-
span.setAttribute(attrKey,
|
|
58
|
+
span.setAttribute(attrKey, mergeCanonicalMetadataAttributes(readableSpan.attributes, value));
|
|
59
59
|
}
|
|
60
60
|
else if (key === "prompt" && typeof value === "object") {
|
|
61
61
|
span.setAttribute(attrKey, JSON.stringify(value));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composite.js","sourceRoot":"","sources":["../../src/processor/composite.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"composite.js","sourceRoot":"","sources":["../../src/processor/composite.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/client.d.ts
CHANGED
|
@@ -20,6 +20,10 @@ export interface UpdateSpanOptions {
|
|
|
20
20
|
traceGroupIdentifier?: string;
|
|
21
21
|
/** Additional metadata */
|
|
22
22
|
metadata?: Record<string, any>;
|
|
23
|
+
/** Time to first token, in seconds */
|
|
24
|
+
timeToFirstToken?: number;
|
|
25
|
+
/** Alias of timeToFirstToken (seconds); wins when both are given */
|
|
26
|
+
ttft?: number;
|
|
23
27
|
};
|
|
24
28
|
}
|
|
25
29
|
/**
|
package/dist/utils/client.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { trace, SpanStatusCode } from "@opentelemetry/api";
|
|
2
2
|
import { RespanSpanAttributes } from "@respan/respan-sdk";
|
|
3
3
|
import { metadataAttributeKey } from "../constants/index.js";
|
|
4
|
+
import { setTimeToFirstTokenAttribute } from "./timeToFirstToken.js";
|
|
4
5
|
/**
|
|
5
6
|
* Implementation of the Respan client
|
|
6
7
|
*/
|
|
@@ -47,7 +48,8 @@ class RespanClientImpl {
|
|
|
47
48
|
}
|
|
48
49
|
// Update Respan-specific parameters
|
|
49
50
|
if (options.respanParams) {
|
|
50
|
-
const { customerIdentifier, traceGroupIdentifier, metadata } = options.respanParams;
|
|
51
|
+
const { customerIdentifier, traceGroupIdentifier, metadata, timeToFirstToken, ttft } = options.respanParams;
|
|
52
|
+
setTimeToFirstTokenAttribute(currentSpan, ttft !== undefined ? ttft : timeToFirstToken);
|
|
51
53
|
if (customerIdentifier) {
|
|
52
54
|
currentSpan.setAttribute(RespanSpanAttributes.RESPAN_CUSTOMER_PARAMS_ID, customerIdentifier);
|
|
53
55
|
}
|
package/dist/utils/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/utils/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAW,cAAc,EAAU,MAAM,oBAAoB,CAAC;AAE5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAA+B,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/utils/client.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/metadata.d.ts
CHANGED
|
@@ -1,2 +1,12 @@
|
|
|
1
|
+
type MetadataRecord = Record<string, unknown>;
|
|
1
2
|
/** Merge canonical metadata JSON without emitting respan.metadata.* aliases. */
|
|
2
3
|
export declare function mergeCanonicalMetadata(existing: unknown, propagated: unknown): string;
|
|
4
|
+
/**
|
|
5
|
+
* Merge propagated metadata with metadata already present on a span.
|
|
6
|
+
*
|
|
7
|
+
* Older instrumentations may still emit `respan.metadata.<key>` aliases.
|
|
8
|
+
* Fold those aliases into the canonical JSON attribute so explicit span
|
|
9
|
+
* metadata keeps precedence and the exported span has one metadata shape.
|
|
10
|
+
*/
|
|
11
|
+
export declare function mergeCanonicalMetadataAttributes(attributes: MetadataRecord, propagated: unknown): string;
|
|
12
|
+
export {};
|
package/dist/utils/metadata.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RespanSpanAttributes } from "@respan/respan-sdk";
|
|
1
2
|
/** Merge canonical metadata JSON without emitting respan.metadata.* aliases. */
|
|
2
3
|
export function mergeCanonicalMetadata(existing, propagated) {
|
|
3
4
|
return safeJson({
|
|
@@ -5,6 +6,31 @@ export function mergeCanonicalMetadata(existing, propagated) {
|
|
|
5
6
|
...metadataRecord(existing),
|
|
6
7
|
});
|
|
7
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Merge propagated metadata with metadata already present on a span.
|
|
11
|
+
*
|
|
12
|
+
* Older instrumentations may still emit `respan.metadata.<key>` aliases.
|
|
13
|
+
* Fold those aliases into the canonical JSON attribute so explicit span
|
|
14
|
+
* metadata keeps precedence and the exported span has one metadata shape.
|
|
15
|
+
*/
|
|
16
|
+
export function mergeCanonicalMetadataAttributes(attributes, propagated) {
|
|
17
|
+
const metadataKey = RespanSpanAttributes.RESPAN_METADATA;
|
|
18
|
+
const aliasPrefix = `${metadataKey}.`;
|
|
19
|
+
const aliases = {};
|
|
20
|
+
for (const key of Object.keys(attributes)) {
|
|
21
|
+
if (!key.startsWith(aliasPrefix))
|
|
22
|
+
continue;
|
|
23
|
+
aliases[key.slice(aliasPrefix.length)] = attributes[key];
|
|
24
|
+
delete attributes[key];
|
|
25
|
+
}
|
|
26
|
+
const merged = safeJson({
|
|
27
|
+
...metadataRecord(propagated),
|
|
28
|
+
...aliases,
|
|
29
|
+
...metadataRecord(attributes[metadataKey]),
|
|
30
|
+
});
|
|
31
|
+
attributes[metadataKey] = merged;
|
|
32
|
+
return merged;
|
|
33
|
+
}
|
|
8
34
|
function metadataRecord(value) {
|
|
9
35
|
if (isRecord(value))
|
|
10
36
|
return { ...value };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/utils/metadata.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/utils/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI1D,gFAAgF;AAChF,MAAM,UAAU,sBAAsB,CACpC,QAAiB,EACjB,UAAmB;IAEnB,OAAO,QAAQ,CAAC;QACd,GAAG,cAAc,CAAC,UAAU,CAAC;QAC7B,GAAG,cAAc,CAAC,QAAQ,CAAC;KAC5B,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gCAAgC,CAC9C,UAA0B,EAC1B,UAAmB;IAEnB,MAAM,WAAW,GAAG,oBAAoB,CAAC,eAAe,CAAC;IACzD,MAAM,WAAW,GAAG,GAAG,WAAW,GAAG,CAAC;IACtC,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,SAAS;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QACzD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC;QACtB,GAAG,cAAc,CAAC,UAAU,CAAC;QAC7B,GAAG,OAAO;QACV,GAAG,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;KAC3C,CAAC,CAAC;IACH,UAAU,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAC;YAC5C,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
package/dist/utils/span.js
CHANGED
|
@@ -2,6 +2,7 @@ import { trace, SpanStatusCode } from "@opentelemetry/api";
|
|
|
2
2
|
import { RESPAN_PACKAGE_NAME } from "../constants/index.js";
|
|
3
3
|
import { RespanParamsSchema, RESPAN_SPAN_ATTRIBUTES_MAP, } from "@respan/respan-sdk";
|
|
4
4
|
import { metadataAttributeKey, LOG_PREFIX_DEBUG } from "../constants/index.js";
|
|
5
|
+
import { setTimeToFirstTokenAttribute, timeToFirstTokenParam, } from "./timeToFirstToken.js";
|
|
5
6
|
// Global tracer instance (singleton)
|
|
6
7
|
let _tracer;
|
|
7
8
|
/**
|
|
@@ -111,6 +112,7 @@ const setRespanAttributes = (span, respanParams) => {
|
|
|
111
112
|
// Use original params if validation fails, but continue processing
|
|
112
113
|
validatedParams = respanParams;
|
|
113
114
|
}
|
|
115
|
+
setTimeToFirstTokenAttribute(span, timeToFirstTokenParam(respanParams));
|
|
114
116
|
// Set attributes based on the imported mapping
|
|
115
117
|
Object.entries(validatedParams).forEach(([key, value]) => {
|
|
116
118
|
if (key in RESPAN_SPAN_ATTRIBUTES_MAP && key !== "metadata") {
|
package/dist/utils/span.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"span.js","sourceRoot":"","sources":["../../src/utils/span.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAgB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAElB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAmB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"span.js","sourceRoot":"","sources":["../../src/utils/span.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ import { hrTime, hrTimeDuration } from "@opentelemetry/core";
|
|
|
10
10
|
import { RESPAN_SPAN_ATTRIBUTES_MAP } from "@respan/respan-sdk";
|
|
11
11
|
import { RESPAN_PACKAGE_NAME } from "../constants/index.js";
|
|
12
12
|
import { getPropagatedAttributes } from "./context.js";
|
|
13
|
-
import {
|
|
13
|
+
import { mergeCanonicalMetadataAttributes } from "./metadata.js";
|
|
14
14
|
// ── ID helpers ──────────────────────────────────────────────────────────────
|
|
15
15
|
function hashStringToHexId(s, length) {
|
|
16
16
|
let hash = 0;
|
|
@@ -79,10 +79,11 @@ export function buildReadableSpan(opts) {
|
|
|
79
79
|
if (!attrKey)
|
|
80
80
|
continue;
|
|
81
81
|
if (key === "metadata") {
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
// Explicit span metadata > respan.metadata.<key> aliases > propagated.
|
|
83
|
+
attrs[attrKey] = mergeCanonicalMetadataAttributes(attrs, value);
|
|
84
84
|
}
|
|
85
85
|
else if (attrs[attrKey] !== undefined) {
|
|
86
|
+
// Only set non-metadata values when caller attrs do not already exist.
|
|
86
87
|
continue;
|
|
87
88
|
}
|
|
88
89
|
else if (key === "prompt" && typeof value === "object") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spanFactory.js","sourceRoot":"","sources":["../../src/utils/spanFactory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAwB,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"spanFactory.js","sourceRoot":"","sources":["../../src/utils/spanFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Span } from "@opentelemetry/api";
|
|
2
|
+
/**
|
|
3
|
+
* Sets the bare `time_to_first_token` span attribute (seconds) from a
|
|
4
|
+
* respan_params value. It is not in RESPAN_SPAN_ATTRIBUTES_MAP because it must
|
|
5
|
+
* not propagate to child spans. An invalid value is dropped with a warning.
|
|
6
|
+
*/
|
|
7
|
+
export declare const setTimeToFirstTokenAttribute: (span: Span, value: unknown) => void;
|
|
8
|
+
/**
|
|
9
|
+
* Reads time to first token from snake_case respan_params. `ttft` wins when
|
|
10
|
+
* both keys are given, matching the backend's alias handling.
|
|
11
|
+
*/
|
|
12
|
+
export declare const timeToFirstTokenParam: (params: Record<string, unknown>) => unknown;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { LOG_PREFIX_WARN, TIME_TO_FIRST_TOKEN_ATTR } from "../constants/index.js";
|
|
2
|
+
/** respan_params alias for time to first token, as documented for the API. */
|
|
3
|
+
const TTFT_PARAM_KEY = "ttft";
|
|
4
|
+
/**
|
|
5
|
+
* Returns the value as finite, non-negative seconds, or undefined if it is not one.
|
|
6
|
+
* No unit conversion: the value is already in seconds.
|
|
7
|
+
*/
|
|
8
|
+
const timeToFirstTokenSeconds = (value) => typeof value === "number" && Number.isFinite(value) && value >= 0
|
|
9
|
+
? value
|
|
10
|
+
: undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Sets the bare `time_to_first_token` span attribute (seconds) from a
|
|
13
|
+
* respan_params value. It is not in RESPAN_SPAN_ATTRIBUTES_MAP because it must
|
|
14
|
+
* not propagate to child spans. An invalid value is dropped with a warning.
|
|
15
|
+
*/
|
|
16
|
+
export const setTimeToFirstTokenAttribute = (span, value) => {
|
|
17
|
+
if (value === undefined || value === null) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const seconds = timeToFirstTokenSeconds(value);
|
|
21
|
+
if (seconds === undefined) {
|
|
22
|
+
console.warn(`${LOG_PREFIX_WARN} Ignoring ${TIME_TO_FIRST_TOKEN_ATTR}=${String(value)}: expected a finite, non-negative number of seconds`);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
span.setAttribute(TIME_TO_FIRST_TOKEN_ATTR, seconds);
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Reads time to first token from snake_case respan_params. `ttft` wins when
|
|
29
|
+
* both keys are given, matching the backend's alias handling.
|
|
30
|
+
*/
|
|
31
|
+
export const timeToFirstTokenParam = (params) => TTFT_PARAM_KEY in params
|
|
32
|
+
? params[TTFT_PARAM_KEY]
|
|
33
|
+
: params[TIME_TO_FIRST_TOKEN_ATTR];
|
|
34
|
+
//# sourceMappingURL=timeToFirstToken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeToFirstToken.js","sourceRoot":"","sources":["../../src/utils/timeToFirstToken.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAElF,8EAA8E;AAC9E,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B;;;GAGG;AACH,MAAM,uBAAuB,GAAG,CAAC,KAAc,EAAsB,EAAE,CACrE,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;IAC/D,CAAC,CAAC,KAAK;IACP,CAAC,CAAC,SAAS,CAAC;AAEhB;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,IAAU,EACV,KAAc,EACR,EAAE;IACR,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CACV,GAAG,eAAe,aAAa,wBAAwB,IAAI,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAC9H,CAAC;QACF,OAAO;IACT,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,MAA+B,EAAW,EAAE,CAChF,cAAc,IAAI,MAAM;IACtB,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IACxB,CAAC,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@respan/tracing",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.6.
|
|
4
|
+
"version": "1.6.2",
|
|
5
5
|
"description": "TypeScript support for Respan SDK",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -45,7 +45,6 @@
|
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@ai-sdk/openai": "^4.0.30",
|
|
47
47
|
"@anthropic-ai/sdk": "0.41.0",
|
|
48
|
-
"@opentelemetry/context-async-hooks": "^2.10.0",
|
|
49
48
|
"@vercel/otel": "^2.1.3",
|
|
50
49
|
"ai": "^7.0.65",
|
|
51
50
|
"dotenv": "^16.4.7",
|
|
@@ -74,4 +73,4 @@
|
|
|
74
73
|
"linux",
|
|
75
74
|
"win32"
|
|
76
75
|
]
|
|
77
|
-
}
|
|
76
|
+
}
|