@langfuse/tracing 4.0.0-alpha.2 → 4.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +111 -20
- package/package.json +2 -2
- package/dist/attributes.d.ts +0 -7
- package/dist/attributes.d.ts.map +0 -1
- package/dist/attributes.js +0 -96
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -271
- package/dist/spanWrapper.d.ts +0 -46
- package/dist/spanWrapper.d.ts.map +0 -1
- package/dist/spanWrapper.js +0 -73
- package/dist/types.d.ts +0 -50
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -1
- package/dist/utils.d.ts +0 -2
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -5
package/dist/index.d.ts
CHANGED
|
@@ -1,32 +1,122 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import * as _opentelemetry_api from '@opentelemetry/api';
|
|
2
|
+
import { Span, TimeInput, Attributes, SpanContext } from '@opentelemetry/api';
|
|
3
|
+
import { OpenAiUsage } from '@langfuse/core';
|
|
4
|
+
export { LangfuseOtelSpanAttributes } from '@langfuse/core';
|
|
5
|
+
|
|
6
|
+
type LangfuseObservationType = "span" | "generation" | "event";
|
|
7
|
+
type ObservationLevel = "DEBUG" | "DEFAULT" | "WARNING" | "ERROR";
|
|
8
|
+
type LangfuseSpanAttributes = {
|
|
9
|
+
input?: unknown;
|
|
10
|
+
output?: unknown;
|
|
11
|
+
metadata?: Record<string, unknown>;
|
|
12
|
+
level?: ObservationLevel;
|
|
13
|
+
statusMessage?: string;
|
|
14
|
+
version?: string;
|
|
15
|
+
environment?: string;
|
|
16
|
+
};
|
|
17
|
+
type LangfuseEventAttributes = LangfuseSpanAttributes;
|
|
18
|
+
type LangfuseGenerationAttributes = LangfuseSpanAttributes & {
|
|
19
|
+
completionStartTime?: Date;
|
|
20
|
+
model?: string | null;
|
|
21
|
+
modelParameters?: {
|
|
22
|
+
[key: string]: string | number | null;
|
|
23
|
+
};
|
|
24
|
+
usageDetails?: {
|
|
25
|
+
[key: string]: number;
|
|
26
|
+
} | OpenAiUsage;
|
|
27
|
+
costDetails?: {
|
|
28
|
+
[key: string]: number;
|
|
29
|
+
};
|
|
30
|
+
prompt?: {
|
|
31
|
+
name: string;
|
|
32
|
+
version: number;
|
|
33
|
+
isFallback: boolean;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
type LangfuseAttributes = LangfuseSpanAttributes | LangfuseGenerationAttributes | LangfuseEventAttributes;
|
|
37
|
+
type LangfuseTraceAttributes = {
|
|
38
|
+
name?: string;
|
|
39
|
+
userId?: string;
|
|
40
|
+
sessionId?: string;
|
|
41
|
+
version?: string;
|
|
42
|
+
release?: string;
|
|
43
|
+
input?: unknown;
|
|
44
|
+
output?: unknown;
|
|
45
|
+
metadata?: unknown;
|
|
46
|
+
tags?: string[];
|
|
47
|
+
public?: boolean;
|
|
48
|
+
environment?: string;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
type LangfuseObservation = LangfuseSpan | LangfuseGeneration | LangfuseEvent;
|
|
52
|
+
type LangfuseSpanWrapperParams = {
|
|
53
|
+
otelSpan: Span;
|
|
54
|
+
attributes?: LangfuseSpanAttributes | LangfuseGenerationAttributes | LangfuseEventAttributes;
|
|
55
|
+
};
|
|
56
|
+
declare abstract class LangfuseSpanWrapper {
|
|
57
|
+
readonly otelSpan: Span;
|
|
58
|
+
id: string;
|
|
59
|
+
traceId: string;
|
|
60
|
+
constructor(params: LangfuseSpanWrapperParams);
|
|
61
|
+
protected get tracer(): _opentelemetry_api.Tracer;
|
|
62
|
+
end(endTime?: TimeInput): void;
|
|
63
|
+
updateTrace(attributes: LangfuseTraceAttributes): this;
|
|
64
|
+
}
|
|
65
|
+
type LangfuseSpanParams = {
|
|
66
|
+
otelSpan: Span;
|
|
67
|
+
attributes?: LangfuseSpanAttributes;
|
|
68
|
+
};
|
|
69
|
+
declare class LangfuseSpan extends LangfuseSpanWrapper {
|
|
70
|
+
constructor(params: LangfuseSpanParams);
|
|
71
|
+
update(attributes: LangfuseSpanAttributes): LangfuseSpan;
|
|
72
|
+
startSpan(name: string, attributes?: LangfuseSpanAttributes): LangfuseSpan;
|
|
73
|
+
startGeneration(name: string, attributes?: LangfuseGenerationAttributes): LangfuseGeneration;
|
|
74
|
+
createEvent(name: string, attributes?: LangfuseEventAttributes): LangfuseEvent;
|
|
75
|
+
}
|
|
76
|
+
type LangfuseGenerationParams = {
|
|
77
|
+
otelSpan: Span;
|
|
78
|
+
attributes?: LangfuseGenerationAttributes;
|
|
79
|
+
};
|
|
80
|
+
declare class LangfuseGeneration extends LangfuseSpanWrapper {
|
|
81
|
+
constructor(params: LangfuseGenerationParams);
|
|
82
|
+
update(attributes: LangfuseGenerationAttributes): LangfuseGeneration;
|
|
83
|
+
createEvent(name: string, attributes?: LangfuseEventAttributes): LangfuseEvent;
|
|
84
|
+
}
|
|
85
|
+
type LangfuseEventParams = {
|
|
86
|
+
otelSpan: Span;
|
|
87
|
+
attributes?: LangfuseEventAttributes;
|
|
88
|
+
timestamp: TimeInput;
|
|
89
|
+
};
|
|
90
|
+
declare class LangfuseEvent extends LangfuseSpanWrapper {
|
|
91
|
+
constructor(params: LangfuseEventParams);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
declare function createTraceAttributes({ name, userId, sessionId, version, release, input, output, metadata, tags, environment, public: isPublic, }?: LangfuseTraceAttributes): Attributes;
|
|
95
|
+
declare function createSpanAttributes({ metadata, input, output, level, statusMessage, version, }: LangfuseSpanAttributes): Attributes;
|
|
96
|
+
declare function createGenerationAttributes({ completionStartTime, metadata, level, statusMessage, version, model, modelParameters, input, output, usageDetails, costDetails, prompt, }: LangfuseGenerationAttributes): Attributes;
|
|
97
|
+
|
|
98
|
+
type StartObservationOptions = {
|
|
9
99
|
startTime?: Date;
|
|
10
100
|
parentSpanContext?: SpanContext;
|
|
11
101
|
};
|
|
12
|
-
|
|
102
|
+
declare function startSpan(name: string, attributes?: LangfuseSpanAttributes, options?: {
|
|
13
103
|
startTime?: TimeInput;
|
|
14
104
|
parentSpanContext?: SpanContext;
|
|
15
105
|
}): LangfuseSpan;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
106
|
+
declare function startGeneration(name: string, attributes?: LangfuseGenerationAttributes, options?: StartObservationOptions): LangfuseGeneration;
|
|
107
|
+
declare function createEvent(name: string, attributes?: LangfuseEventAttributes, options?: StartObservationOptions): LangfuseEvent;
|
|
108
|
+
declare function startActiveSpan<F extends (span: LangfuseSpan) => unknown>(name: string, fn: F, options?: StartObservationOptions): ReturnType<F>;
|
|
109
|
+
declare function startActiveGeneration<F extends (span: LangfuseGeneration) => unknown>(name: string, fn: F, options?: StartObservationOptions): ReturnType<F>;
|
|
110
|
+
declare function updateActiveTrace(attributes: LangfuseTraceAttributes): void;
|
|
111
|
+
declare function updateActiveSpan(attributes: LangfuseSpanAttributes): void;
|
|
112
|
+
declare function updateActiveGeneration(attributes: LangfuseGenerationAttributes): void;
|
|
113
|
+
interface ObserveOptions {
|
|
24
114
|
name?: string;
|
|
25
115
|
asType?: "span" | "generation";
|
|
26
116
|
captureInput?: boolean;
|
|
27
117
|
captureOutput?: boolean;
|
|
28
118
|
}
|
|
29
|
-
|
|
119
|
+
declare function observe<T extends (...args: unknown[]) => unknown>(fn: T, options?: ObserveOptions): T;
|
|
30
120
|
/**
|
|
31
121
|
* Creates a trace ID for OpenTelemetry spans.
|
|
32
122
|
*
|
|
@@ -71,5 +161,6 @@ export declare function observe<T extends (...args: unknown[]) => unknown>(fn: T
|
|
|
71
161
|
* console.log(traceId === scoringTraceId); // true - can now find and score the trace
|
|
72
162
|
* ```
|
|
73
163
|
*/
|
|
74
|
-
|
|
75
|
-
|
|
164
|
+
declare function createTraceId(seed?: string): Promise<string>;
|
|
165
|
+
|
|
166
|
+
export { type LangfuseAttributes, LangfuseEvent, type LangfuseEventAttributes, LangfuseGeneration, type LangfuseGenerationAttributes, type LangfuseObservation, type LangfuseObservationType, LangfuseSpan, type LangfuseSpanAttributes, type LangfuseTraceAttributes, type ObservationLevel, type ObserveOptions, type StartObservationOptions, createEvent, createGenerationAttributes, createSpanAttributes, createTraceAttributes, createTraceId, observe, startActiveGeneration, startActiveSpan, startGeneration, startSpan, updateActiveGeneration, updateActiveSpan, updateActiveTrace };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@langfuse/tracing",
|
|
3
|
-
"version": "4.0.0-
|
|
3
|
+
"version": "4.0.0-beta.0",
|
|
4
4
|
"author": "Langfuse",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"engines": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"dist"
|
|
24
24
|
],
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@langfuse/core": "^4.0.0-
|
|
26
|
+
"@langfuse/core": "^4.0.0-beta.0"
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"@opentelemetry/api": "^1.9.0"
|
package/dist/attributes.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { type Attributes } from "@opentelemetry/api";
|
|
2
|
-
import { LangfuseGenerationAttributes, LangfuseSpanAttributes, LangfuseTraceAttributes } from "./types.js";
|
|
3
|
-
export declare function createTraceAttributes({ name, userId, sessionId, version, release, input, output, metadata, tags, environment, public: isPublic, }?: LangfuseTraceAttributes): Attributes;
|
|
4
|
-
export declare function createSpanAttributes({ metadata, input, output, level, statusMessage, version, }: LangfuseSpanAttributes): Attributes;
|
|
5
|
-
export declare function createGenerationAttributes({ completionStartTime, metadata, level, statusMessage, version, model, modelParameters, input, output, usageDetails, costDetails, prompt, }: LangfuseGenerationAttributes): Attributes;
|
|
6
|
-
export declare function createEventAttributes({ metadata, input, output, level, statusMessage, version, }: LangfuseSpanAttributes): Attributes;
|
|
7
|
-
//# sourceMappingURL=attributes.d.ts.map
|
package/dist/attributes.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../src/attributes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,MAAM,EACN,SAAS,EACT,OAAO,EACP,OAAO,EACP,KAAK,EACL,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,MAAM,EAAE,QAAQ,GACjB,GAAE,uBAA4B,GAAG,UAAU,CAkB3C;AAED,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,KAAK,EACL,MAAM,EACN,KAAK,EACL,aAAa,EACb,OAAO,GACR,EAAE,sBAAsB,GAAG,UAAU,CAcrC;AAED,wBAAgB,0BAA0B,CAAC,EACzC,mBAAmB,EACnB,QAAQ,EACR,KAAK,EACL,aAAa,EACb,OAAO,EACP,KAAK,EACL,eAAe,EACf,KAAK,EACL,MAAM,EACN,YAAY,EACZ,WAAW,EACX,MAAM,GACP,EAAE,4BAA4B,GAAG,UAAU,CA8B3C;AAED,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,KAAK,EACL,MAAM,EACN,KAAK,EACL,aAAa,EACb,OAAO,GACR,EAAE,sBAAsB,GAAG,UAAU,CAcrC"}
|
package/dist/attributes.js
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { LangfuseOtelSpanAttributes } from "@langfuse/core";
|
|
2
|
-
export function createTraceAttributes({ name, userId, sessionId, version, release, input, output, metadata, tags, environment, public: isPublic, } = {}) {
|
|
3
|
-
const attributes = {
|
|
4
|
-
[LangfuseOtelSpanAttributes.TRACE_NAME]: name,
|
|
5
|
-
[LangfuseOtelSpanAttributes.TRACE_USER_ID]: userId,
|
|
6
|
-
[LangfuseOtelSpanAttributes.TRACE_SESSION_ID]: sessionId,
|
|
7
|
-
[LangfuseOtelSpanAttributes.VERSION]: version,
|
|
8
|
-
[LangfuseOtelSpanAttributes.RELEASE]: release,
|
|
9
|
-
[LangfuseOtelSpanAttributes.TRACE_INPUT]: _serialize(input),
|
|
10
|
-
[LangfuseOtelSpanAttributes.TRACE_OUTPUT]: _serialize(output),
|
|
11
|
-
[LangfuseOtelSpanAttributes.TRACE_TAGS]: tags,
|
|
12
|
-
[LangfuseOtelSpanAttributes.ENVIRONMENT]: environment,
|
|
13
|
-
[LangfuseOtelSpanAttributes.TRACE_PUBLIC]: isPublic,
|
|
14
|
-
..._flattenAndSerializeMetadata(metadata, "trace"),
|
|
15
|
-
};
|
|
16
|
-
return Object.fromEntries(Object.entries(attributes).filter(([_, v]) => v != null));
|
|
17
|
-
}
|
|
18
|
-
export function createSpanAttributes({ metadata, input, output, level, statusMessage, version, }) {
|
|
19
|
-
const attributes = {
|
|
20
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_TYPE]: "span",
|
|
21
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_LEVEL]: level,
|
|
22
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_STATUS_MESSAGE]: statusMessage,
|
|
23
|
-
[LangfuseOtelSpanAttributes.VERSION]: version,
|
|
24
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_INPUT]: _serialize(input),
|
|
25
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_OUTPUT]: _serialize(output),
|
|
26
|
-
..._flattenAndSerializeMetadata(metadata, "observation"),
|
|
27
|
-
};
|
|
28
|
-
return Object.fromEntries(Object.entries(attributes).filter(([_, v]) => v != null));
|
|
29
|
-
}
|
|
30
|
-
export function createGenerationAttributes({ completionStartTime, metadata, level, statusMessage, version, model, modelParameters, input, output, usageDetails, costDetails, prompt, }) {
|
|
31
|
-
const attributes = {
|
|
32
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_TYPE]: "generation",
|
|
33
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_LEVEL]: level,
|
|
34
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_STATUS_MESSAGE]: statusMessage,
|
|
35
|
-
[LangfuseOtelSpanAttributes.VERSION]: version,
|
|
36
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_INPUT]: _serialize(input),
|
|
37
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_OUTPUT]: _serialize(output),
|
|
38
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_MODEL]: model,
|
|
39
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_USAGE_DETAILS]: _serialize(usageDetails),
|
|
40
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_COST_DETAILS]: _serialize(costDetails),
|
|
41
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_COMPLETION_START_TIME]: _serialize(completionStartTime),
|
|
42
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_MODEL_PARAMETERS]: _serialize(modelParameters),
|
|
43
|
-
...(prompt && !prompt.isFallback
|
|
44
|
-
? {
|
|
45
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_PROMPT_NAME]: prompt.name,
|
|
46
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_PROMPT_VERSION]: prompt.version,
|
|
47
|
-
}
|
|
48
|
-
: {}),
|
|
49
|
-
..._flattenAndSerializeMetadata(metadata, "observation"),
|
|
50
|
-
};
|
|
51
|
-
return Object.fromEntries(Object.entries(attributes).filter(([_, v]) => v != null));
|
|
52
|
-
}
|
|
53
|
-
export function createEventAttributes({ metadata, input, output, level, statusMessage, version, }) {
|
|
54
|
-
const attributes = {
|
|
55
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_TYPE]: "event",
|
|
56
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_LEVEL]: level,
|
|
57
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_STATUS_MESSAGE]: statusMessage,
|
|
58
|
-
[LangfuseOtelSpanAttributes.VERSION]: version,
|
|
59
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_INPUT]: _serialize(input),
|
|
60
|
-
[LangfuseOtelSpanAttributes.OBSERVATION_OUTPUT]: _serialize(output),
|
|
61
|
-
..._flattenAndSerializeMetadata(metadata, "observation"),
|
|
62
|
-
};
|
|
63
|
-
return Object.fromEntries(Object.entries(attributes).filter(([_, v]) => v != null));
|
|
64
|
-
}
|
|
65
|
-
function _serialize(obj) {
|
|
66
|
-
try {
|
|
67
|
-
return obj != null ? JSON.stringify(obj) : undefined;
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
return "<failed to serialize>";
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
function _flattenAndSerializeMetadata(metadata, type) {
|
|
74
|
-
const prefix = type === "observation"
|
|
75
|
-
? LangfuseOtelSpanAttributes.OBSERVATION_METADATA
|
|
76
|
-
: LangfuseOtelSpanAttributes.TRACE_METADATA;
|
|
77
|
-
const metadataAttributes = {};
|
|
78
|
-
if (metadata === undefined || metadata === null) {
|
|
79
|
-
return metadataAttributes;
|
|
80
|
-
}
|
|
81
|
-
if (typeof metadata !== "object" || Array.isArray(metadata)) {
|
|
82
|
-
const serialized = _serialize(metadata);
|
|
83
|
-
if (serialized) {
|
|
84
|
-
metadataAttributes[prefix] = serialized;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
for (const [key, value] of Object.entries(metadata)) {
|
|
89
|
-
const serialized = typeof value === "string" ? value : _serialize(value);
|
|
90
|
-
if (serialized) {
|
|
91
|
-
metadataAttributes[`${prefix}.${key}`] = serialized;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return metadataAttributes;
|
|
96
|
-
}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,SAAS,EAIT,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,YAAY,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,uBAAuB,EACvB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,EAC5B,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAEpB,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,iBAAiB,CAAC,EAAE,WAAW,CAAC;CACjC,CAAC;AA0CF,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,sBAAsB,EACnC,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,iBAAiB,CAAC,EAAE,WAAW,CAAC;CACjC,GACA,YAAY,CAOd;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,4BAA4B,EACzC,OAAO,CAAC,EAAE,uBAAuB,GAChC,kBAAkB,CAOpB;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,uBAAuB,EACpC,OAAO,CAAC,EAAE,uBAAuB,iBAWlC;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,EACvE,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,EACL,OAAO,CAAC,EAAE,uBAAuB,GAChC,UAAU,CAAC,CAAC,CAAC,CA4Bf;AAED,wBAAgB,qBAAqB,CACnC,CAAC,SAAS,CAAC,IAAI,EAAE,kBAAkB,KAAK,OAAO,EAC/C,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,UAAU,CAAC,CAAC,CAAC,CA4BvE;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,uBAAuB,QAYpE;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,sBAAsB,QAYlE;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,4BAA4B,QAazC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAC/D,EAAE,EAAE,CAAC,EACL,OAAO,GAAE,cAAmB,GAC3B,CAAC,CA2EH;AA6BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAsB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAalE"}
|
package/dist/index.js
DELETED
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
import { getGlobalLogger } from "@langfuse/core";
|
|
2
|
-
import { trace, context, SpanStatusCode, } from "@opentelemetry/api";
|
|
3
|
-
import { createGenerationAttributes, createSpanAttributes, createTraceAttributes, } from "./attributes.js";
|
|
4
|
-
import { LangfuseEvent, LangfuseGeneration, LangfuseSpan, } from "./spanWrapper.js";
|
|
5
|
-
import { getLangfuseTracer } from "./utils.js";
|
|
6
|
-
export * from "./spanWrapper.js";
|
|
7
|
-
export { createTraceAttributes, createSpanAttributes, createGenerationAttributes, } from "./attributes.js";
|
|
8
|
-
export { LangfuseOtelSpanAttributes } from "@langfuse/core";
|
|
9
|
-
function createOtelSpan(params) {
|
|
10
|
-
return getLangfuseTracer().startSpan(params.name, { startTime: params.startTime }, createParentContext(params.parentSpanContext));
|
|
11
|
-
}
|
|
12
|
-
function createParentContext(parentSpanContext) {
|
|
13
|
-
if (!parentSpanContext)
|
|
14
|
-
return;
|
|
15
|
-
return trace.setSpanContext(context.active(), parentSpanContext);
|
|
16
|
-
}
|
|
17
|
-
function wrapPromise(promise, span) {
|
|
18
|
-
return promise.then((value) => {
|
|
19
|
-
span.end(); // End span AFTER Promise resolves
|
|
20
|
-
return value;
|
|
21
|
-
}, (err) => {
|
|
22
|
-
span
|
|
23
|
-
.setStatus({
|
|
24
|
-
code: SpanStatusCode.ERROR,
|
|
25
|
-
message: err instanceof Error ? err.message : "Unknown error",
|
|
26
|
-
})
|
|
27
|
-
.end(); // End span AFTER Promise rejects
|
|
28
|
-
throw err;
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
export function startSpan(name, attributes, options) {
|
|
32
|
-
const otelSpan = createOtelSpan({
|
|
33
|
-
name,
|
|
34
|
-
...options,
|
|
35
|
-
});
|
|
36
|
-
return new LangfuseSpan({ otelSpan, attributes });
|
|
37
|
-
}
|
|
38
|
-
export function startGeneration(name, attributes, options) {
|
|
39
|
-
const otelSpan = createOtelSpan({
|
|
40
|
-
name,
|
|
41
|
-
...options,
|
|
42
|
-
});
|
|
43
|
-
return new LangfuseGeneration({ otelSpan, attributes });
|
|
44
|
-
}
|
|
45
|
-
export function createEvent(name, attributes, options) {
|
|
46
|
-
var _a;
|
|
47
|
-
const timestamp = (_a = options === null || options === void 0 ? void 0 : options.startTime) !== null && _a !== void 0 ? _a : new Date();
|
|
48
|
-
const otelSpan = createOtelSpan({
|
|
49
|
-
name,
|
|
50
|
-
...options,
|
|
51
|
-
startTime: timestamp,
|
|
52
|
-
});
|
|
53
|
-
return new LangfuseEvent({ otelSpan, attributes, timestamp });
|
|
54
|
-
}
|
|
55
|
-
export function startActiveSpan(name, fn, options) {
|
|
56
|
-
var _a;
|
|
57
|
-
return getLangfuseTracer().startActiveSpan(name, { startTime: options === null || options === void 0 ? void 0 : options.startTime }, (_a = createParentContext(options === null || options === void 0 ? void 0 : options.parentSpanContext)) !== null && _a !== void 0 ? _a : context.active(), (span) => {
|
|
58
|
-
try {
|
|
59
|
-
const result = fn(new LangfuseSpan({ otelSpan: span }));
|
|
60
|
-
if (result instanceof Promise) {
|
|
61
|
-
return wrapPromise(result, span);
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
span.end();
|
|
65
|
-
return result;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
catch (err) {
|
|
69
|
-
span
|
|
70
|
-
.setStatus({
|
|
71
|
-
code: SpanStatusCode.ERROR,
|
|
72
|
-
message: err instanceof Error ? err.message : "Unknown error",
|
|
73
|
-
})
|
|
74
|
-
.end();
|
|
75
|
-
throw err;
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
export function startActiveGeneration(name, fn, options) {
|
|
80
|
-
var _a;
|
|
81
|
-
return getLangfuseTracer().startActiveSpan(name, { startTime: options === null || options === void 0 ? void 0 : options.startTime }, (_a = createParentContext(options === null || options === void 0 ? void 0 : options.parentSpanContext)) !== null && _a !== void 0 ? _a : context.active(), (span) => {
|
|
82
|
-
try {
|
|
83
|
-
const result = fn(new LangfuseGeneration({ otelSpan: span }));
|
|
84
|
-
if (result instanceof Promise) {
|
|
85
|
-
return wrapPromise(result, span);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
span.end();
|
|
89
|
-
return result;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
catch (err) {
|
|
93
|
-
span
|
|
94
|
-
.setStatus({
|
|
95
|
-
code: SpanStatusCode.ERROR,
|
|
96
|
-
message: err instanceof Error ? err.message : "Unknown error",
|
|
97
|
-
})
|
|
98
|
-
.end();
|
|
99
|
-
throw err;
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
export function updateActiveTrace(attributes) {
|
|
104
|
-
const span = trace.getActiveSpan();
|
|
105
|
-
if (!span) {
|
|
106
|
-
getGlobalLogger().warn("No active OTEL span in context. Skipping trace update.");
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
span.setAttributes(createTraceAttributes(attributes));
|
|
110
|
-
}
|
|
111
|
-
export function updateActiveSpan(attributes) {
|
|
112
|
-
const span = trace.getActiveSpan();
|
|
113
|
-
if (!span) {
|
|
114
|
-
getGlobalLogger().warn("No active OTEL span in context. Skipping span update.");
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
span.setAttributes(createSpanAttributes(attributes));
|
|
118
|
-
}
|
|
119
|
-
export function updateActiveGeneration(attributes) {
|
|
120
|
-
const span = trace.getActiveSpan();
|
|
121
|
-
if (!span) {
|
|
122
|
-
getGlobalLogger().warn("No active OTEL span in context. Skipping generation update.");
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
span.setAttributes(createGenerationAttributes(attributes));
|
|
126
|
-
}
|
|
127
|
-
export function observe(fn, options = {}) {
|
|
128
|
-
const { name = fn.name || "anonymous-function", asType = "span", captureInput = true, captureOutput = true, } = options;
|
|
129
|
-
const wrappedFunction = (...args) => {
|
|
130
|
-
// Prepare input data
|
|
131
|
-
const inputData = captureInput ? _captureArguments(args) : undefined;
|
|
132
|
-
// Create the appropriate observation type
|
|
133
|
-
const observation = asType === "generation"
|
|
134
|
-
? startGeneration(name, inputData ? { input: inputData } : {})
|
|
135
|
-
: startSpan(name, inputData ? { input: inputData } : {});
|
|
136
|
-
// Set the observation span as active in the context
|
|
137
|
-
const activeContext = trace.setSpan(context.active(), observation.otelSpan);
|
|
138
|
-
try {
|
|
139
|
-
const result = context.with(activeContext, () => fn(...args));
|
|
140
|
-
// Handle async functions - check if result is a Promise
|
|
141
|
-
// TODO: handle returned generators for streamed responses
|
|
142
|
-
if (result instanceof Promise) {
|
|
143
|
-
return result.then((value) => {
|
|
144
|
-
if (captureOutput) {
|
|
145
|
-
observation.update({ output: _captureOutput(value) });
|
|
146
|
-
}
|
|
147
|
-
observation.end();
|
|
148
|
-
return value;
|
|
149
|
-
}, (error) => {
|
|
150
|
-
observation
|
|
151
|
-
.update({
|
|
152
|
-
level: "ERROR",
|
|
153
|
-
statusMessage: (error instanceof Error ? error.message : String(error)) ||
|
|
154
|
-
"Function threw an error",
|
|
155
|
-
output: captureOutput ? { error: String(error) } : undefined,
|
|
156
|
-
})
|
|
157
|
-
.end();
|
|
158
|
-
throw error;
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
// Handle sync functions
|
|
163
|
-
if (captureOutput) {
|
|
164
|
-
observation.update({ output: _captureOutput(result) });
|
|
165
|
-
}
|
|
166
|
-
observation.end();
|
|
167
|
-
return result;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
catch (error) {
|
|
171
|
-
observation
|
|
172
|
-
.update({
|
|
173
|
-
level: "ERROR",
|
|
174
|
-
statusMessage: (error instanceof Error ? error.message : String(error)) ||
|
|
175
|
-
"Function threw an error",
|
|
176
|
-
output: captureOutput ? { error: String(error) } : undefined,
|
|
177
|
-
})
|
|
178
|
-
.end();
|
|
179
|
-
throw error;
|
|
180
|
-
}
|
|
181
|
-
};
|
|
182
|
-
return wrappedFunction;
|
|
183
|
-
}
|
|
184
|
-
// Helper function to safely capture function arguments
|
|
185
|
-
function _captureArguments(args) {
|
|
186
|
-
try {
|
|
187
|
-
if (args.length === 0)
|
|
188
|
-
return undefined;
|
|
189
|
-
if (args.length === 1)
|
|
190
|
-
return args[0];
|
|
191
|
-
return args;
|
|
192
|
-
}
|
|
193
|
-
catch {
|
|
194
|
-
return "<failed to capture arguments>";
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
// Helper function to safely capture function output
|
|
198
|
-
function _captureOutput(value) {
|
|
199
|
-
try {
|
|
200
|
-
// Handle undefined/null
|
|
201
|
-
if (value === undefined || value === null)
|
|
202
|
-
return value;
|
|
203
|
-
// For primitive types, return as-is
|
|
204
|
-
if (typeof value !== "object")
|
|
205
|
-
return value;
|
|
206
|
-
// For objects, return them directly (serialization happens in span processor)
|
|
207
|
-
return value;
|
|
208
|
-
}
|
|
209
|
-
catch {
|
|
210
|
-
return "<failed to capture output>";
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Creates a trace ID for OpenTelemetry spans.
|
|
215
|
-
*
|
|
216
|
-
* @param seed - A seed string for deterministic trace ID generation.
|
|
217
|
-
* If provided (non-empty), the same seed will always generate the same trace ID.
|
|
218
|
-
* If empty or falsy, generates a random trace ID.
|
|
219
|
-
*
|
|
220
|
-
* Using a seed is especially useful when trying to correlate external,
|
|
221
|
-
* non-W3C compliant IDs with Langfuse trace IDs. This allows you to later
|
|
222
|
-
* have a method available for scoring the Langfuse trace given only the
|
|
223
|
-
* external ID by regenerating the same trace ID from the external ID.
|
|
224
|
-
*
|
|
225
|
-
* @returns A Promise that resolves to a 32-character lowercase hexadecimal string suitable for use as an OpenTelemetry trace ID.
|
|
226
|
-
*
|
|
227
|
-
* @example
|
|
228
|
-
* ```typescript
|
|
229
|
-
* // Deterministic trace ID from seed
|
|
230
|
-
* const traceId1 = await createTraceId("my-session-123");
|
|
231
|
-
* const traceId2 = await createTraceId("my-session-123");
|
|
232
|
-
* console.log(traceId1 === traceId2); // true
|
|
233
|
-
*
|
|
234
|
-
* // Random trace ID
|
|
235
|
-
* const randomId1 = await createTraceId("");
|
|
236
|
-
* const randomId2 = await createTraceId("");
|
|
237
|
-
* console.log(randomId1 === randomId2); // false
|
|
238
|
-
*
|
|
239
|
-
* // Use with spans
|
|
240
|
-
* const span = startSpan("my-span", {}, {
|
|
241
|
-
* parentSpanContext: {
|
|
242
|
-
* traceId: await createTraceId("session-456"),
|
|
243
|
-
* spanId: "0123456789abcdef",
|
|
244
|
-
* traceFlags: 1
|
|
245
|
-
* }
|
|
246
|
-
* });
|
|
247
|
-
*
|
|
248
|
-
* // Correlating external IDs with Langfuse traces
|
|
249
|
-
* const externalId = "ext-12345-67890";
|
|
250
|
-
* const traceId = await createTraceId(externalId);
|
|
251
|
-
*
|
|
252
|
-
* // Later, when you need to score this trace, regenerate the same ID
|
|
253
|
-
* const scoringTraceId = await createTraceId(externalId);
|
|
254
|
-
* console.log(traceId === scoringTraceId); // true - can now find and score the trace
|
|
255
|
-
* ```
|
|
256
|
-
*/
|
|
257
|
-
export async function createTraceId(seed) {
|
|
258
|
-
if (seed) {
|
|
259
|
-
const data = new TextEncoder().encode(seed);
|
|
260
|
-
const hashBuffer = await crypto.subtle.digest("SHA-256", data);
|
|
261
|
-
const hashArray = new Uint8Array(hashBuffer);
|
|
262
|
-
return uint8ArrayToHex(hashArray).slice(0, 32);
|
|
263
|
-
}
|
|
264
|
-
const randomValues = crypto.getRandomValues(new Uint8Array(16));
|
|
265
|
-
return uint8ArrayToHex(randomValues);
|
|
266
|
-
}
|
|
267
|
-
function uint8ArrayToHex(array) {
|
|
268
|
-
return Array.from(array)
|
|
269
|
-
.map((b) => b.toString(16).padStart(2, "0"))
|
|
270
|
-
.join("");
|
|
271
|
-
}
|
package/dist/spanWrapper.d.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { Span, TimeInput } from "@opentelemetry/api";
|
|
2
|
-
import { LangfuseGenerationAttributes, LangfuseSpanAttributes, LangfuseEventAttributes, LangfuseTraceAttributes } from "./types.js";
|
|
3
|
-
export type LangfuseObservation = LangfuseSpan | LangfuseGeneration | LangfuseEvent;
|
|
4
|
-
type LangfuseSpanWrapperParams = {
|
|
5
|
-
otelSpan: Span;
|
|
6
|
-
attributes?: LangfuseSpanAttributes | LangfuseGenerationAttributes | LangfuseEventAttributes;
|
|
7
|
-
};
|
|
8
|
-
declare abstract class LangfuseSpanWrapper {
|
|
9
|
-
readonly otelSpan: Span;
|
|
10
|
-
id: string;
|
|
11
|
-
traceId: string;
|
|
12
|
-
constructor(params: LangfuseSpanWrapperParams);
|
|
13
|
-
protected get tracer(): import("@opentelemetry/api").Tracer;
|
|
14
|
-
end(endTime?: TimeInput): void;
|
|
15
|
-
updateTrace(attributes: LangfuseTraceAttributes): this;
|
|
16
|
-
}
|
|
17
|
-
type LangfuseSpanParams = {
|
|
18
|
-
otelSpan: Span;
|
|
19
|
-
attributes?: LangfuseSpanAttributes;
|
|
20
|
-
};
|
|
21
|
-
export declare class LangfuseSpan extends LangfuseSpanWrapper {
|
|
22
|
-
constructor(params: LangfuseSpanParams);
|
|
23
|
-
update(attributes: LangfuseSpanAttributes): LangfuseSpan;
|
|
24
|
-
startSpan(name: string, attributes?: LangfuseSpanAttributes): LangfuseSpan;
|
|
25
|
-
startGeneration(name: string, attributes?: LangfuseGenerationAttributes): LangfuseGeneration;
|
|
26
|
-
createEvent(name: string, attributes?: LangfuseEventAttributes): LangfuseEvent;
|
|
27
|
-
}
|
|
28
|
-
type LangfuseGenerationParams = {
|
|
29
|
-
otelSpan: Span;
|
|
30
|
-
attributes?: LangfuseGenerationAttributes;
|
|
31
|
-
};
|
|
32
|
-
export declare class LangfuseGeneration extends LangfuseSpanWrapper {
|
|
33
|
-
constructor(params: LangfuseGenerationParams);
|
|
34
|
-
update(attributes: LangfuseGenerationAttributes): LangfuseGeneration;
|
|
35
|
-
createEvent(name: string, attributes?: LangfuseEventAttributes): LangfuseEvent;
|
|
36
|
-
}
|
|
37
|
-
type LangfuseEventParams = {
|
|
38
|
-
otelSpan: Span;
|
|
39
|
-
attributes?: LangfuseEventAttributes;
|
|
40
|
-
timestamp: TimeInput;
|
|
41
|
-
};
|
|
42
|
-
export declare class LangfuseEvent extends LangfuseSpanWrapper {
|
|
43
|
-
constructor(params: LangfuseEventParams);
|
|
44
|
-
}
|
|
45
|
-
export {};
|
|
46
|
-
//# sourceMappingURL=spanWrapper.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spanWrapper.d.ts","sourceRoot":"","sources":["../src/spanWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAQrD,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAKpB,MAAM,MAAM,mBAAmB,GAC3B,YAAY,GACZ,kBAAkB,GAClB,aAAa,CAAC;AAElB,KAAK,yBAAyB,GAAG;IAC/B,QAAQ,EAAE,IAAI,CAAC;IACf,UAAU,CAAC,EACP,sBAAsB,GACtB,4BAA4B,GAC5B,uBAAuB,CAAC;CAC7B,CAAC;AAEF,uBAAe,mBAAmB;IAChC,SAAgB,QAAQ,EAAE,IAAI,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;gBAEX,MAAM,EAAE,yBAAyB;IAM7C,SAAS,KAAK,MAAM,wCAEnB;IAEM,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS;IAIvB,WAAW,CAAC,UAAU,EAAE,uBAAuB;CAKvD;AAED,KAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,IAAI,CAAC;IACf,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC,CAAC;AACF,qBAAa,YAAa,SAAQ,mBAAmB;gBACvC,MAAM,EAAE,kBAAkB;IAO/B,MAAM,CAAC,UAAU,EAAE,sBAAsB,GAAG,YAAY;IAMxD,SAAS,CACd,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,sBAAsB,GAClC,YAAY;IAMR,eAAe,CACpB,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,4BAA4B,GACxC,kBAAkB;IAMd,WAAW,CAChB,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,uBAAuB,GACnC,aAAa;CAKjB;AAED,KAAK,wBAAwB,GAAG;IAC9B,QAAQ,EAAE,IAAI,CAAC;IACf,UAAU,CAAC,EAAE,4BAA4B,CAAC;CAC3C,CAAC;AACF,qBAAa,kBAAmB,SAAQ,mBAAmB;gBAC7C,MAAM,EAAE,wBAAwB;IAS5C,MAAM,CAAC,UAAU,EAAE,4BAA4B,GAAG,kBAAkB;IAMpE,WAAW,CACT,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,uBAAuB,GACnC,aAAa;CAKjB;AAED,KAAK,mBAAmB,GAAG;IACzB,QAAQ,EAAE,IAAI,CAAC;IACf,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AACF,qBAAa,aAAc,SAAQ,mBAAmB;gBACxC,MAAM,EAAE,mBAAmB;CASxC"}
|
package/dist/spanWrapper.js
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { createEventAttributes, createGenerationAttributes, createSpanAttributes, createTraceAttributes, } from "./attributes.js";
|
|
2
|
-
import { getLangfuseTracer } from "./utils.js";
|
|
3
|
-
import { createEvent, startGeneration, startSpan } from "./index.js";
|
|
4
|
-
class LangfuseSpanWrapper {
|
|
5
|
-
constructor(params) {
|
|
6
|
-
this.otelSpan = params.otelSpan;
|
|
7
|
-
this.id = params.otelSpan.spanContext().spanId;
|
|
8
|
-
this.traceId = params.otelSpan.spanContext().traceId;
|
|
9
|
-
}
|
|
10
|
-
get tracer() {
|
|
11
|
-
return getLangfuseTracer();
|
|
12
|
-
}
|
|
13
|
-
end(endTime) {
|
|
14
|
-
this.otelSpan.end(endTime);
|
|
15
|
-
}
|
|
16
|
-
updateTrace(attributes) {
|
|
17
|
-
this.otelSpan.setAttributes(createTraceAttributes(attributes));
|
|
18
|
-
return this;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
export class LangfuseSpan extends LangfuseSpanWrapper {
|
|
22
|
-
constructor(params) {
|
|
23
|
-
super(params);
|
|
24
|
-
if (params.attributes) {
|
|
25
|
-
this.otelSpan.setAttributes(createSpanAttributes(params.attributes));
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
update(attributes) {
|
|
29
|
-
this.otelSpan.setAttributes(createSpanAttributes(attributes));
|
|
30
|
-
return this;
|
|
31
|
-
}
|
|
32
|
-
startSpan(name, attributes) {
|
|
33
|
-
return startSpan(name, attributes, {
|
|
34
|
-
parentSpanContext: this.otelSpan.spanContext(),
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
startGeneration(name, attributes) {
|
|
38
|
-
return startGeneration(name, attributes, {
|
|
39
|
-
parentSpanContext: this.otelSpan.spanContext(),
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
createEvent(name, attributes) {
|
|
43
|
-
return createEvent(name, attributes, {
|
|
44
|
-
parentSpanContext: this.otelSpan.spanContext(),
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
export class LangfuseGeneration extends LangfuseSpanWrapper {
|
|
49
|
-
constructor(params) {
|
|
50
|
-
super(params);
|
|
51
|
-
if (params.attributes) {
|
|
52
|
-
this.otelSpan.setAttributes(createGenerationAttributes(params.attributes));
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
update(attributes) {
|
|
56
|
-
this.otelSpan.setAttributes(createGenerationAttributes(attributes));
|
|
57
|
-
return this;
|
|
58
|
-
}
|
|
59
|
-
createEvent(name, attributes) {
|
|
60
|
-
return createEvent(name, attributes, {
|
|
61
|
-
parentSpanContext: this.otelSpan.spanContext(),
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
export class LangfuseEvent extends LangfuseSpanWrapper {
|
|
66
|
-
constructor(params) {
|
|
67
|
-
super(params);
|
|
68
|
-
if (params.attributes) {
|
|
69
|
-
this.otelSpan.setAttributes(createEventAttributes(params.attributes));
|
|
70
|
-
}
|
|
71
|
-
this.otelSpan.end(params.timestamp);
|
|
72
|
-
}
|
|
73
|
-
}
|
package/dist/types.d.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { OpenAiUsage } from "@langfuse/core";
|
|
2
|
-
export type LangfuseObservationType = "span" | "generation" | "event";
|
|
3
|
-
export type ObservationLevel = "DEBUG" | "DEFAULT" | "WARNING" | "ERROR";
|
|
4
|
-
export type LangfuseSpanAttributes = {
|
|
5
|
-
input?: unknown;
|
|
6
|
-
output?: unknown;
|
|
7
|
-
metadata?: Record<string, unknown>;
|
|
8
|
-
level?: ObservationLevel;
|
|
9
|
-
statusMessage?: string;
|
|
10
|
-
version?: string;
|
|
11
|
-
environment?: string;
|
|
12
|
-
};
|
|
13
|
-
export type LangfuseEventAttributes = LangfuseSpanAttributes;
|
|
14
|
-
export type LangfuseGenerationAttributes = LangfuseSpanAttributes & {
|
|
15
|
-
completionStartTime?: Date;
|
|
16
|
-
model?: string | null;
|
|
17
|
-
modelParameters?: {
|
|
18
|
-
[key: string]: string | number | null;
|
|
19
|
-
};
|
|
20
|
-
usageDetails?: {
|
|
21
|
-
[key: string]: number;
|
|
22
|
-
} | OpenAiUsage;
|
|
23
|
-
costDetails?: {
|
|
24
|
-
[key: string]: number;
|
|
25
|
-
};
|
|
26
|
-
prompt?: {
|
|
27
|
-
name: string;
|
|
28
|
-
version: number;
|
|
29
|
-
isFallback: boolean;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
export type LangfuseAttributes = LangfuseSpanAttributes | LangfuseGenerationAttributes | LangfuseEventAttributes;
|
|
33
|
-
export type LangfuseTraceAttributes = {
|
|
34
|
-
name?: string;
|
|
35
|
-
userId?: string;
|
|
36
|
-
sessionId?: string;
|
|
37
|
-
version?: string;
|
|
38
|
-
release?: string;
|
|
39
|
-
input?: unknown;
|
|
40
|
-
output?: unknown;
|
|
41
|
-
metadata?: unknown;
|
|
42
|
-
tags?: string[];
|
|
43
|
-
public?: boolean;
|
|
44
|
-
environment?: string;
|
|
45
|
-
};
|
|
46
|
-
export type TraceContext = {
|
|
47
|
-
traceId: string;
|
|
48
|
-
parentObservationId?: string;
|
|
49
|
-
};
|
|
50
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,CAAC;AACtE,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AACzE,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,CAAC;AAC7D,MAAM,MAAM,4BAA4B,GAAG,sBAAsB,GAAG;IAClE,mBAAmB,CAAC,EAAE,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;KACvC,CAAC;IACF,YAAY,CAAC,EACT;QACE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,GACD,WAAW,CAAC;IAChB,WAAW,CAAC,EAAE;QACZ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,sBAAsB,GACtB,4BAA4B,GAC5B,uBAAuB,CAAC;AAE5B,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC"}
|
package/dist/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/utils.d.ts
DELETED
package/dist/utils.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,wCAEhC"}
|