@narumitw/pi-langfuse 0.28.0 → 0.31.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/package.json +7 -7
- package/src/runtime.ts +25 -9
- package/src/tracing.ts +1 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@narumitw/pi-langfuse",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.31.0",
|
|
4
4
|
"description": "Pi extension that traces LLM generations and tool activity to Langfuse.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -30,15 +30,15 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@langfuse/otel": "^5.9.1",
|
|
33
|
-
"@langfuse/tracing": "^
|
|
33
|
+
"@langfuse/tracing": "^5.9.1",
|
|
34
34
|
"@opentelemetry/api": "^1.9.1",
|
|
35
|
-
"@opentelemetry/exporter-trace-otlp-http": "^0.
|
|
36
|
-
"@opentelemetry/sdk-trace-base": "^2.
|
|
37
|
-
"@opentelemetry/sdk-trace-node": "^2.
|
|
35
|
+
"@opentelemetry/exporter-trace-otlp-http": "^0.221.0",
|
|
36
|
+
"@opentelemetry/sdk-trace-base": "^2.10.0",
|
|
37
|
+
"@opentelemetry/sdk-trace-node": "^2.10.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@biomejs/biome": "2.5.
|
|
41
|
-
"@earendil-works/pi-coding-agent": "0.
|
|
40
|
+
"@biomejs/biome": "2.5.5",
|
|
41
|
+
"@earendil-works/pi-coding-agent": "0.82.1",
|
|
42
42
|
"@types/node": "26.1.1",
|
|
43
43
|
"typescript": "7.0.2"
|
|
44
44
|
},
|
package/src/runtime.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { LangfuseSpanProcessor } from "@langfuse/otel";
|
|
|
3
3
|
import {
|
|
4
4
|
type LangfuseObservation,
|
|
5
5
|
type LangfuseObservationAttributes,
|
|
6
|
-
|
|
6
|
+
LangfuseOtelSpanAttributes,
|
|
7
7
|
setLangfuseTracerProvider,
|
|
8
8
|
startObservation,
|
|
9
9
|
} from "@langfuse/tracing";
|
|
@@ -44,7 +44,28 @@ class ProductionObservation implements Observation {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
updateTrace(attributes: ObservationAttributes): Observation {
|
|
47
|
-
|
|
47
|
+
const { input, output, metadata, name, sessionId, tags, version } = attributes;
|
|
48
|
+
if (input !== undefined || output !== undefined) {
|
|
49
|
+
this.native.setTraceIO({ input, output });
|
|
50
|
+
}
|
|
51
|
+
if (name !== undefined) {
|
|
52
|
+
this.native.otelSpan.setAttribute(LangfuseOtelSpanAttributes.TRACE_NAME, name);
|
|
53
|
+
}
|
|
54
|
+
if (sessionId !== undefined) {
|
|
55
|
+
this.native.otelSpan.setAttribute(LangfuseOtelSpanAttributes.TRACE_SESSION_ID, sessionId);
|
|
56
|
+
}
|
|
57
|
+
if (tags !== undefined) {
|
|
58
|
+
this.native.otelSpan.setAttribute(LangfuseOtelSpanAttributes.TRACE_TAGS, tags);
|
|
59
|
+
}
|
|
60
|
+
if (version !== undefined) {
|
|
61
|
+
this.native.otelSpan.setAttribute(LangfuseOtelSpanAttributes.VERSION, version);
|
|
62
|
+
}
|
|
63
|
+
for (const [key, value] of Object.entries(metadata ?? {})) {
|
|
64
|
+
this.native.otelSpan.setAttribute(
|
|
65
|
+
`${LangfuseOtelSpanAttributes.TRACE_METADATA}.${key}`,
|
|
66
|
+
String(value),
|
|
67
|
+
);
|
|
68
|
+
}
|
|
48
69
|
return this;
|
|
49
70
|
}
|
|
50
71
|
|
|
@@ -67,9 +88,7 @@ class ProductionTraceBackend implements TraceBackend {
|
|
|
67
88
|
): Observation {
|
|
68
89
|
const parent = options.parent;
|
|
69
90
|
if (parent instanceof ProductionObservation) {
|
|
70
|
-
return new ProductionObservation(
|
|
71
|
-
startChild(parent.native, name, attributes, options.asType),
|
|
72
|
-
);
|
|
91
|
+
return new ProductionObservation(startChild(parent.native, name, attributes, options.asType));
|
|
73
92
|
}
|
|
74
93
|
return new ProductionObservation(startRoot(name, attributes, options.asType));
|
|
75
94
|
}
|
|
@@ -236,10 +255,7 @@ function maskSecretValue(
|
|
|
236
255
|
return data.map((item) => maskSecretValue(item, secrets, active));
|
|
237
256
|
}
|
|
238
257
|
return Object.fromEntries(
|
|
239
|
-
Object.entries(data).map(([key, value]) => [
|
|
240
|
-
key,
|
|
241
|
-
maskSecretValue(value, secrets, active),
|
|
242
|
-
]),
|
|
258
|
+
Object.entries(data).map(([key, value]) => [key, maskSecretValue(value, secrets, active)]),
|
|
243
259
|
);
|
|
244
260
|
} finally {
|
|
245
261
|
active.delete(data);
|
package/src/tracing.ts
CHANGED
|
@@ -243,8 +243,7 @@ export class TraceRecorder {
|
|
|
243
243
|
}
|
|
244
244
|
|
|
245
245
|
beginAgent(input: BeginAgentInput): void {
|
|
246
|
-
if (this.root)
|
|
247
|
-
this.closeActiveTrace("Interrupted by a new Pi run.", undefined, "interrupted");
|
|
246
|
+
if (this.root) this.closeActiveTrace("Interrupted by a new Pi run.", undefined, "interrupted");
|
|
248
247
|
|
|
249
248
|
this.lastOutput = undefined;
|
|
250
249
|
this.lastAssistant = undefined;
|