@amaster.ai/pi-telemetry 0.1.9 → 0.1.11
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 +13 -20
- package/dist/config.d.ts +0 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/extension.d.ts.map +1 -1
- package/dist/extension.js +84 -28
- package/dist/extension.js.map +1 -1
- package/dist/index.d.ts +6 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/langfuse/config.d.ts +8 -0
- package/dist/langfuse/config.d.ts.map +1 -0
- package/dist/langfuse/config.js +79 -0
- package/dist/langfuse/config.js.map +1 -0
- package/dist/langfuse/exporters.d.ts +34 -0
- package/dist/langfuse/exporters.d.ts.map +1 -0
- package/dist/langfuse/exporters.js +466 -0
- package/dist/langfuse/exporters.js.map +1 -0
- package/dist/langfuse/mapping.d.ts +24 -0
- package/dist/langfuse/mapping.d.ts.map +1 -0
- package/dist/langfuse/mapping.js +130 -0
- package/dist/langfuse/mapping.js.map +1 -0
- package/dist/langfuse/metadata.d.ts +17 -0
- package/dist/langfuse/metadata.d.ts.map +1 -0
- package/dist/langfuse/metadata.js +89 -0
- package/dist/langfuse/metadata.js.map +1 -0
- package/dist/langfuse/types.d.ts +31 -0
- package/dist/langfuse/types.d.ts.map +1 -0
- package/dist/langfuse/types.js +36 -0
- package/dist/langfuse/types.js.map +1 -0
- package/dist/langfuse/utils.d.ts +17 -0
- package/dist/langfuse/utils.d.ts.map +1 -0
- package/dist/langfuse/utils.js +113 -0
- package/dist/langfuse/utils.js.map +1 -0
- package/dist/langfuse.d.ts +3 -77
- package/dist/langfuse.d.ts.map +1 -1
- package/dist/langfuse.js +4 -1119
- package/dist/langfuse.js.map +1 -1
- package/dist/otel.d.ts +5 -4
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +42 -30
- package/dist/otel.js.map +1 -1
- package/dist/parse.d.ts +4 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +14 -0
- package/dist/parse.js.map +1 -0
- package/package.json +8 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../src/langfuse/mapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { JsonObject, RuntimeLifecycleEvent, RuntimeLlmGenerationEvent, RuntimeLlmUsage, RuntimeToolEvent } from '@amaster.ai/pi-shared';
|
|
2
|
+
export declare function lineageMetadata(event: {
|
|
3
|
+
sessionId: string;
|
|
4
|
+
conversationId?: string;
|
|
5
|
+
parentSessionId?: string;
|
|
6
|
+
childSessionId?: string;
|
|
7
|
+
runId?: string;
|
|
8
|
+
taskRunId?: string;
|
|
9
|
+
spawnBatchId?: string;
|
|
10
|
+
}): JsonObject;
|
|
11
|
+
export declare function lifecycleMetadata(event: RuntimeLifecycleEvent): JsonObject;
|
|
12
|
+
export declare function toolMetadata(event: RuntimeToolEvent): JsonObject;
|
|
13
|
+
export declare function llmGenerationMetadata(event: RuntimeLlmGenerationEvent): JsonObject;
|
|
14
|
+
export declare function toLangfuseUsageDetails(usage: RuntimeLlmUsage): JsonObject;
|
|
15
|
+
export declare function langfuseUsageAttributes(usage: RuntimeLlmUsage): JsonObject;
|
|
16
|
+
export declare function langfuseTraceId(traceId: string): string;
|
|
17
|
+
//# sourceMappingURL=metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/langfuse/metadata.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,qBAAqB,EACrB,yBAAyB,EACzB,eAAe,EACf,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAG/B,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,UAAU,CAmBb;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,GAAG,UAAU,CAW1E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU,CAUhE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,yBAAyB,GAAG,UAAU,CAalF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CAQzE;AAKD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CAa1E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { compactSessionId, shortCorrelationId } from './utils.js';
|
|
3
|
+
export function lineageMetadata(event) {
|
|
4
|
+
const sessionId = compactSessionId(event.sessionId);
|
|
5
|
+
const conversationId = compactSessionId(event.conversationId);
|
|
6
|
+
const taskRunId = event.taskRunId ?? shortCorrelationId(event.runId);
|
|
7
|
+
// Trace-level session grouping follows the ROOT session: subagent tool and
|
|
8
|
+
// generation events carry their child's local sessionId alongside
|
|
9
|
+
// parentSessionId, and using it would split one trace across two sessions.
|
|
10
|
+
const rootSessionId = compactSessionId(event.parentSessionId ?? event.sessionId);
|
|
11
|
+
return {
|
|
12
|
+
...(sessionId ? { sessionId } : {}),
|
|
13
|
+
// Mapped by Langfuse's OTEL ingestion to the trace's sessionId — without
|
|
14
|
+
// it the OTEL write path loses the session grouping the SDK path had.
|
|
15
|
+
...(rootSessionId ? { 'langfuse.session.id': rootSessionId } : {}),
|
|
16
|
+
...(conversationId && conversationId !== sessionId ? { conversationId } : {}),
|
|
17
|
+
...(event.parentSessionId ? { parentSessionId: compactSessionId(event.parentSessionId) } : {}),
|
|
18
|
+
...(event.childSessionId ? { childSessionId: compactSessionId(event.childSessionId) } : {}),
|
|
19
|
+
...(taskRunId ? { taskRunId } : {}),
|
|
20
|
+
...(event.spawnBatchId ? { spawnBatchId: shortCorrelationId(event.spawnBatchId) } : {}),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function lifecycleMetadata(event) {
|
|
24
|
+
return {
|
|
25
|
+
eventType: event.type,
|
|
26
|
+
...lineageMetadata(event),
|
|
27
|
+
...(event.durationMs !== undefined ? { durationMs: event.durationMs } : {}),
|
|
28
|
+
...(event.model ? { model: `${event.model.provider}/${event.model.model}` } : {}),
|
|
29
|
+
...(event.model?.thinkingLevel ? { thinkingLevel: event.model.thinkingLevel } : {}),
|
|
30
|
+
...(event.toolPolicyProfile ? { toolPolicyProfile: event.toolPolicyProfile } : {}),
|
|
31
|
+
...(event.details ? { details: event.details } : {}),
|
|
32
|
+
...(event.error ? { error: event.error } : {}),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function toolMetadata(event) {
|
|
36
|
+
return {
|
|
37
|
+
...lineageMetadata(event),
|
|
38
|
+
toolCallId: event.toolCallId,
|
|
39
|
+
toolName: event.toolName,
|
|
40
|
+
status: event.status,
|
|
41
|
+
...(event.durationMs !== undefined ? { durationMs: event.durationMs } : {}),
|
|
42
|
+
...(event.details ? { details: event.details } : {}),
|
|
43
|
+
...(event.error ? { error: event.error } : {}),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export function llmGenerationMetadata(event) {
|
|
47
|
+
return {
|
|
48
|
+
...lineageMetadata(event),
|
|
49
|
+
llmGenerationId: event.llmGenerationId,
|
|
50
|
+
status: event.status,
|
|
51
|
+
model: `${event.model.provider}/${event.model.model}`,
|
|
52
|
+
...(event.model.thinkingLevel ? { thinkingLevel: event.model.thinkingLevel } : {}),
|
|
53
|
+
...(event.durationMs !== undefined ? { durationMs: event.durationMs } : {}),
|
|
54
|
+
...(event.responseId ? { responseId: event.responseId } : {}),
|
|
55
|
+
...(event.stopReason ? { stopReason: event.stopReason } : {}),
|
|
56
|
+
...(event.usage ? { usage: event.usage } : {}),
|
|
57
|
+
...(event.error ? { error: event.error } : {}),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export function toLangfuseUsageDetails(usage) {
|
|
61
|
+
return {
|
|
62
|
+
...(usage.input !== undefined ? { input: usage.input } : {}),
|
|
63
|
+
...(usage.output !== undefined ? { output: usage.output } : {}),
|
|
64
|
+
...(usage.cacheRead !== undefined ? { cache_read: usage.cacheRead } : {}),
|
|
65
|
+
...(usage.cacheWrite !== undefined ? { cache_write: usage.cacheWrite } : {}),
|
|
66
|
+
...(usage.totalTokens !== undefined ? { total: usage.totalTokens } : {}),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
// Langfuse maps these two JSON-string attributes onto a generation's
|
|
70
|
+
// usage/cost statistics; unrecognized flat keys (usage.input etc.) would only
|
|
71
|
+
// land in unfilterable metadata.
|
|
72
|
+
export function langfuseUsageAttributes(usage) {
|
|
73
|
+
return {
|
|
74
|
+
'langfuse.observation.usage_details': JSON.stringify(toLangfuseUsageDetails(usage)),
|
|
75
|
+
...(usage.cost
|
|
76
|
+
? {
|
|
77
|
+
'langfuse.observation.cost_details': JSON.stringify({
|
|
78
|
+
...(usage.cost.input !== undefined ? { input: usage.cost.input } : {}),
|
|
79
|
+
...(usage.cost.output !== undefined ? { output: usage.cost.output } : {}),
|
|
80
|
+
...(usage.cost.total !== undefined ? { total: usage.cost.total } : {}),
|
|
81
|
+
}),
|
|
82
|
+
}
|
|
83
|
+
: {}),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
export function langfuseTraceId(traceId) {
|
|
87
|
+
return createHash('sha256').update(`trace:${traceId}`).digest('hex').slice(0, 32);
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/langfuse/metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { RuntimeTelemetryOptions } from '../index.js';
|
|
2
|
+
export type LangfuseExporterConfig = {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
publicKey: string;
|
|
5
|
+
secretKey: string;
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
flushAt: number;
|
|
8
|
+
flushIntervalMs: number;
|
|
9
|
+
} & RuntimeTelemetryOptions;
|
|
10
|
+
export type OtelExporterConfig = {
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
endpoint: string;
|
|
13
|
+
headers?: Record<string, string>;
|
|
14
|
+
flushAt: number;
|
|
15
|
+
flushIntervalMs: number;
|
|
16
|
+
langfuse?: {
|
|
17
|
+
publicKey: string;
|
|
18
|
+
secretKey: string;
|
|
19
|
+
baseUrl: string;
|
|
20
|
+
flushAt: number;
|
|
21
|
+
flushIntervalMs: number;
|
|
22
|
+
};
|
|
23
|
+
} & RuntimeTelemetryOptions;
|
|
24
|
+
export declare const DEFAULT_LANGFUSE_BASE_URL = "https://cloud.langfuse.com";
|
|
25
|
+
export declare const DEFAULT_FLUSH_AT = 20;
|
|
26
|
+
export declare const DEFAULT_FLUSH_INTERVAL_MS = 5000;
|
|
27
|
+
export declare const MAX_CLOSE_MS = 30000;
|
|
28
|
+
export declare const FILTERABLE_METADATA_KEYS: readonly ["eventType", "sessionId", "conversationId", "parentSessionId", "childSessionId", "taskRunId", "spawnBatchId", "toolName", "toolCallId", "status", "llmGenerationId", "model", "thinkingLevel", "stopReason", "responseId", "durationMs", "toolPolicyProfile"];
|
|
29
|
+
export declare const MAX_ATTRIBUTE_VALUE_BYTES = 1000000;
|
|
30
|
+
export declare const MAX_STATUS_MESSAGE_CHARS = 4096;
|
|
31
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/langfuse/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,uBAAuB,CAAC;AAE5B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IAGxB,QAAQ,CAAC,EAAE;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH,GAAG,uBAAuB,CAAC;AAE5B,eAAO,MAAM,yBAAyB,+BAA+B,CAAC;AACtE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C,eAAO,MAAM,YAAY,QAAS,CAAC;AAMnC,eAAO,MAAM,wBAAwB,yQAkB3B,CAAC;AAIX,eAAO,MAAM,yBAAyB,UAAY,CAAC;AAEnD,eAAO,MAAM,wBAAwB,OAAQ,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export const DEFAULT_LANGFUSE_BASE_URL = 'https://cloud.langfuse.com';
|
|
2
|
+
export const DEFAULT_FLUSH_AT = 20;
|
|
3
|
+
export const DEFAULT_FLUSH_INTERVAL_MS = 5000;
|
|
4
|
+
// Lifecycle shutdown must not wait forever on the SDK.
|
|
5
|
+
export const MAX_CLOSE_MS = 30_000;
|
|
6
|
+
// SDK-path metadata keys promoted to langfuse.observation.metadata.* so they
|
|
7
|
+
// stay filterable on the OTEL write path (everything else sinks into
|
|
8
|
+
// Langfuse's metadata.attributes catch-all). Scalars only — object payloads
|
|
9
|
+
// like details/usage/error are never useful as filters and would duplicate
|
|
10
|
+
// the largest values in the trace onto every span.
|
|
11
|
+
export const FILTERABLE_METADATA_KEYS = [
|
|
12
|
+
'eventType',
|
|
13
|
+
'sessionId',
|
|
14
|
+
'conversationId',
|
|
15
|
+
'parentSessionId',
|
|
16
|
+
'childSessionId',
|
|
17
|
+
'taskRunId',
|
|
18
|
+
'spawnBatchId',
|
|
19
|
+
'toolName',
|
|
20
|
+
'toolCallId',
|
|
21
|
+
'status',
|
|
22
|
+
'llmGenerationId',
|
|
23
|
+
'model',
|
|
24
|
+
'thinkingLevel',
|
|
25
|
+
'stopReason',
|
|
26
|
+
'responseId',
|
|
27
|
+
'durationMs',
|
|
28
|
+
'toolPolicyProfile',
|
|
29
|
+
];
|
|
30
|
+
// Big LLM inputs/outputs otherwise multiply through the duplicated
|
|
31
|
+
// observation/input.value keys into requests over Langfuse Cloud's ~5MB
|
|
32
|
+
// limit; 1MB per attribute keeps a single span deliverable.
|
|
33
|
+
export const MAX_ATTRIBUTE_VALUE_BYTES = 1_000_000;
|
|
34
|
+
// status.message carries raw error text; cap it like any other payload.
|
|
35
|
+
export const MAX_STATUS_MESSAGE_CHARS = 4_096;
|
|
36
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/langfuse/types.ts"],"names":[],"mappings":"AA4BA,MAAM,CAAC,MAAM,yBAAyB,GAAG,4BAA4B,CAAC;AACtE,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAC9C,uDAAuD;AACvD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AACnC,6EAA6E;AAC7E,qEAAqE;AACrE,4EAA4E;AAC5E,2EAA2E;AAC3E,mDAAmD;AACnD,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,WAAW;IACX,WAAW;IACX,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,WAAW;IACX,cAAc;IACd,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,iBAAiB;IACjB,OAAO;IACP,eAAe;IACf,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,mBAAmB;CACX,CAAC;AACX,mEAAmE;AACnE,wEAAwE;AACxE,4DAA4D;AAC5D,MAAM,CAAC,MAAM,yBAAyB,GAAG,SAAS,CAAC;AACnD,wEAAwE;AACxE,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { RuntimeLlmGenerationEvent, RuntimeToolEvent } from '@amaster.ai/pi-shared';
|
|
2
|
+
import type { RuntimeLlmStreamEvent, RuntimeTelemetryEvent } from '../index.js';
|
|
3
|
+
import { type LangfuseExporterConfig } from './types.js';
|
|
4
|
+
export declare function utf8Prefix(value: string, maxBytes: number): string;
|
|
5
|
+
export declare function truncateAttributePayload(value: string): string;
|
|
6
|
+
export declare function isStructuredJson(value: string): boolean;
|
|
7
|
+
export declare function normalizeOtelTracesEndpoint(endpoint: string): string;
|
|
8
|
+
export declare function shortCorrelationId(value: string | undefined): string | undefined;
|
|
9
|
+
export declare function compactSessionId(value: string | undefined): string | undefined;
|
|
10
|
+
export declare function assertNever(value: never): never;
|
|
11
|
+
export declare function requireTraceId(traceId: string | undefined): string;
|
|
12
|
+
export declare function isToolEvent(event: RuntimeTelemetryEvent): event is RuntimeToolEvent;
|
|
13
|
+
export declare function isLlmGenerationEvent(event: RuntimeTelemetryEvent): event is RuntimeLlmGenerationEvent;
|
|
14
|
+
export declare function isLlmStreamEvent(event: RuntimeTelemetryEvent): event is RuntimeLlmStreamEvent;
|
|
15
|
+
export declare function applyTelemetryRedaction(config: Pick<LangfuseExporterConfig, 'includePayloads' | 'redactEvent'>, event: RuntimeTelemetryEvent): RuntimeTelemetryEvent | undefined;
|
|
16
|
+
export declare function stripTelemetryPayloads(event: RuntimeTelemetryEvent): RuntimeTelemetryEvent;
|
|
17
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/langfuse/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,KAAK,sBAAsB,EAA6B,MAAM,YAAY,CAAC;AAEpF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOlE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgB9D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CASvD;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAehF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAY9E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAE/C;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKlE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,KAAK,IAAI,gBAAgB,CAEnF;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,qBAAqB,GAC3B,KAAK,IAAI,yBAAyB,CAEpC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,KAAK,IAAI,qBAAqB,CAE7F;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,iBAAiB,GAAG,aAAa,CAAC,EACvE,KAAK,EAAE,qBAAqB,GAC3B,qBAAqB,GAAG,SAAS,CASnC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,qBAAqB,CAe1F"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { MAX_ATTRIBUTE_VALUE_BYTES } from './types.js';
|
|
2
|
+
export function utf8Prefix(value, maxBytes) {
|
|
3
|
+
const bytes = Buffer.from(value, 'utf8');
|
|
4
|
+
let end = Math.min(maxBytes, bytes.length);
|
|
5
|
+
while (end > 0 && end < bytes.length && (bytes[end] & 0xc0) === 0x80) {
|
|
6
|
+
end -= 1;
|
|
7
|
+
}
|
|
8
|
+
return bytes.subarray(0, end).toString('utf8');
|
|
9
|
+
}
|
|
10
|
+
export function truncateAttributePayload(value) {
|
|
11
|
+
const bytes = Buffer.byteLength(value, 'utf8');
|
|
12
|
+
if (bytes <= MAX_ATTRIBUTE_VALUE_BYTES) {
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
if (isStructuredJson(value)) {
|
|
16
|
+
return JSON.stringify({
|
|
17
|
+
truncated: true,
|
|
18
|
+
originalBytes: bytes,
|
|
19
|
+
preview: utf8Prefix(value, 64_000),
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
// Byte-accurate: the cap is UTF-8 bytes, and slicing by UTF-16 code units
|
|
23
|
+
// would let multibyte-heavy payloads slip past it.
|
|
24
|
+
const marker = `... [truncated ${bytes - MAX_ATTRIBUTE_VALUE_BYTES} bytes]`;
|
|
25
|
+
return `${utf8Prefix(value, MAX_ATTRIBUTE_VALUE_BYTES - Buffer.byteLength(marker))}${marker}`;
|
|
26
|
+
}
|
|
27
|
+
export function isStructuredJson(value) {
|
|
28
|
+
const first = value.trimStart()[0];
|
|
29
|
+
if (first !== '{' && first !== '[')
|
|
30
|
+
return false;
|
|
31
|
+
try {
|
|
32
|
+
JSON.parse(value);
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export function normalizeOtelTracesEndpoint(endpoint) {
|
|
40
|
+
return endpoint.endsWith('/v1/traces') ? endpoint : `${endpoint.replace(/\/+$/, '')}/v1/traces`;
|
|
41
|
+
}
|
|
42
|
+
export function shortCorrelationId(value) {
|
|
43
|
+
if (!value) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
const normalized = value.startsWith('trace:') ? value.slice('trace:'.length) : value;
|
|
47
|
+
const uuid = normalized.match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i)?.[0];
|
|
48
|
+
if (uuid) {
|
|
49
|
+
return uuid.slice(0, 8);
|
|
50
|
+
}
|
|
51
|
+
if (/^[0-9a-f]{32}$/i.test(normalized)) {
|
|
52
|
+
return normalized.slice(0, 8);
|
|
53
|
+
}
|
|
54
|
+
return normalized.length > 24 ? normalized.slice(0, 12) : normalized;
|
|
55
|
+
}
|
|
56
|
+
export function compactSessionId(value) {
|
|
57
|
+
if (!value) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
const [root, ...subagents] = value.split(':subagent:');
|
|
61
|
+
if (subagents.length === 0) {
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
64
|
+
return [
|
|
65
|
+
root,
|
|
66
|
+
...subagents.map((sessionId) => `sub:${shortCorrelationId(sessionId) ?? sessionId}`),
|
|
67
|
+
].join('/');
|
|
68
|
+
}
|
|
69
|
+
export function assertNever(value) {
|
|
70
|
+
throw new Error(`Unexpected telemetry event type: ${String(value)}`);
|
|
71
|
+
}
|
|
72
|
+
export function requireTraceId(traceId) {
|
|
73
|
+
if (!traceId) {
|
|
74
|
+
throw new Error('Telemetry event is missing traceId');
|
|
75
|
+
}
|
|
76
|
+
return traceId;
|
|
77
|
+
}
|
|
78
|
+
export function isToolEvent(event) {
|
|
79
|
+
return 'toolCallId' in event;
|
|
80
|
+
}
|
|
81
|
+
export function isLlmGenerationEvent(event) {
|
|
82
|
+
return 'llmGenerationId' in event && !('streamEvents' in event);
|
|
83
|
+
}
|
|
84
|
+
export function isLlmStreamEvent(event) {
|
|
85
|
+
return 'streamEvents' in event;
|
|
86
|
+
}
|
|
87
|
+
export function applyTelemetryRedaction(config, event) {
|
|
88
|
+
const redacted = config.redactEvent ? config.redactEvent(event) : event;
|
|
89
|
+
if (!redacted) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
const sanitized = redacted.error
|
|
93
|
+
? { ...redacted, error: 'Telemetry operation failed' }
|
|
94
|
+
: redacted;
|
|
95
|
+
return config.includePayloads === false ? stripTelemetryPayloads(sanitized) : sanitized;
|
|
96
|
+
}
|
|
97
|
+
export function stripTelemetryPayloads(event) {
|
|
98
|
+
if (isLlmStreamEvent(event)) {
|
|
99
|
+
const { streamEvents: _streamEvents, ...rest } = event;
|
|
100
|
+
return { ...rest, streamEvents: [] };
|
|
101
|
+
}
|
|
102
|
+
if (isLlmGenerationEvent(event)) {
|
|
103
|
+
const { input: _input, output: _output, error: _error, ...rest } = event;
|
|
104
|
+
return rest;
|
|
105
|
+
}
|
|
106
|
+
if (isToolEvent(event)) {
|
|
107
|
+
const { args: _args, details: _details, error: _error, ...rest } = event;
|
|
108
|
+
return rest;
|
|
109
|
+
}
|
|
110
|
+
const { details: _details, error: _error, ...rest } = event;
|
|
111
|
+
return rest;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/langfuse/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/langfuse.d.ts
CHANGED
|
@@ -1,78 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export type LangfuseExporterConfig
|
|
4
|
-
enabled: boolean;
|
|
5
|
-
publicKey: string;
|
|
6
|
-
secretKey: string;
|
|
7
|
-
baseUrl: string;
|
|
8
|
-
flushAt: number;
|
|
9
|
-
flushIntervalMs: number;
|
|
10
|
-
} & RuntimeTelemetryOptions;
|
|
11
|
-
export type OtelExporterConfig = {
|
|
12
|
-
enabled: boolean;
|
|
13
|
-
endpoint: string;
|
|
14
|
-
headers?: Record<string, string>;
|
|
15
|
-
flushAt: number;
|
|
16
|
-
flushIntervalMs: number;
|
|
17
|
-
errorLabel?: string;
|
|
18
|
-
} & RuntimeTelemetryOptions;
|
|
19
|
-
export type LangfuseFetch = TelemetryFetch;
|
|
20
|
-
export interface LangfuseSdkClient {
|
|
21
|
-
trace(body?: Record<string, unknown>): LangfuseSdkTraceClient;
|
|
22
|
-
flushAsync(): Promise<void>;
|
|
23
|
-
shutdownAsync(): Promise<void>;
|
|
24
|
-
}
|
|
25
|
-
export interface LangfuseSdkTraceClient {
|
|
26
|
-
update(body: Record<string, unknown>): unknown;
|
|
27
|
-
span(body: Record<string, unknown>): LangfuseSdkSpanClient;
|
|
28
|
-
generation(body: Record<string, unknown>): LangfuseSdkGenerationClient;
|
|
29
|
-
}
|
|
30
|
-
export interface LangfuseSdkSpanClient {
|
|
31
|
-
update(body: Record<string, unknown>): unknown;
|
|
32
|
-
span(body: Record<string, unknown>): LangfuseSdkSpanClient;
|
|
33
|
-
generation(body: Record<string, unknown>): LangfuseSdkGenerationClient;
|
|
34
|
-
}
|
|
35
|
-
export interface LangfuseSdkGenerationClient {
|
|
36
|
-
update(body: Record<string, unknown>): unknown;
|
|
37
|
-
}
|
|
38
|
-
export declare class LangfuseSdkRuntimeEventExporter implements RuntimeEventExporter {
|
|
39
|
-
private readonly config;
|
|
40
|
-
private readonly client;
|
|
41
|
-
private readonly traces;
|
|
42
|
-
private readonly spans;
|
|
43
|
-
private readonly generations;
|
|
44
|
-
constructor(config: LangfuseExporterConfig, client?: LangfuseSdkClient);
|
|
45
|
-
publish(event: RuntimeTelemetryEvent): Promise<void>;
|
|
46
|
-
flush(): Promise<void>;
|
|
47
|
-
close(): Promise<void>;
|
|
48
|
-
private flushIfTerminalEvent;
|
|
49
|
-
private publishLifecycleEvent;
|
|
50
|
-
private publishToolEvent;
|
|
51
|
-
private publishLlmGenerationEvent;
|
|
52
|
-
private getOrCreateSdkTrace;
|
|
53
|
-
private getSdkSpanParent;
|
|
54
|
-
private getSdkEventParent;
|
|
55
|
-
private getSdkSubagentParent;
|
|
56
|
-
private closeSdkSubagentBatchSpans;
|
|
57
|
-
private ensureSdkRootSpan;
|
|
58
|
-
}
|
|
59
|
-
export declare class OtelRuntimeEventExporter implements RuntimeEventExporter {
|
|
60
|
-
private readonly config;
|
|
61
|
-
private readonly endpoint;
|
|
62
|
-
private readonly fetchImpl;
|
|
63
|
-
private readonly pendingStarts;
|
|
64
|
-
private readonly queue;
|
|
65
|
-
private flushTimer;
|
|
66
|
-
private flushing;
|
|
67
|
-
constructor(config: OtelExporterConfig, fetchImpl?: LangfuseFetch);
|
|
68
|
-
publish(event: RuntimeTelemetryEvent): Promise<void>;
|
|
69
|
-
flush(): Promise<void>;
|
|
70
|
-
close(): Promise<void>;
|
|
71
|
-
private scheduleFlush;
|
|
72
|
-
private sendSpans;
|
|
73
|
-
}
|
|
74
|
-
export declare function createRuntimeEventExporterFromEnv(env: TelemetryEnvironment): RuntimeEventExporter;
|
|
75
|
-
export declare function createLangfuseExporter(telemetryConfig: TelemetryConfig): RuntimeEventExporter;
|
|
76
|
-
export declare function resolveLangfuseExporterConfig(telemetryConfig: TelemetryConfig): LangfuseExporterConfig;
|
|
77
|
-
export declare function resolveLangfuseConfig(env: TelemetryEnvironment): LangfuseExporterConfig;
|
|
1
|
+
export { createLangfuseExporter, createRuntimeEventExporterFromEnv, resolveLangfuseConfig, resolveLangfuseExporterConfig, } from './langfuse/config.js';
|
|
2
|
+
export { OtelRuntimeEventExporter } from './langfuse/exporters.js';
|
|
3
|
+
export type { LangfuseExporterConfig, OtelExporterConfig, } from './langfuse/types.js';
|
|
78
4
|
//# sourceMappingURL=langfuse.d.ts.map
|
package/dist/langfuse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"langfuse.d.ts","sourceRoot":"","sources":["../src/langfuse.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"langfuse.d.ts","sourceRoot":"","sources":["../src/langfuse.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,iCAAiC,EACjC,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,YAAY,EACV,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC"}
|