@langfuse/core 4.2.1 → 4.4.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.cjs +409 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +212 -1
- package/dist/index.d.ts +212 -1
- package/dist/index.mjs +407 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -1
package/dist/index.cjs
CHANGED
|
@@ -30,6 +30,7 @@ __export(index_exports, {
|
|
|
30
30
|
CommentObjectType: () => CommentObjectType,
|
|
31
31
|
DatasetStatus: () => DatasetStatus,
|
|
32
32
|
Error: () => Error2,
|
|
33
|
+
LANGFUSE_SDK_EXPERIMENT_ENVIRONMENT: () => LANGFUSE_SDK_EXPERIMENT_ENVIRONMENT,
|
|
33
34
|
LANGFUSE_SDK_NAME: () => LANGFUSE_SDK_NAME,
|
|
34
35
|
LANGFUSE_SDK_VERSION: () => LANGFUSE_SDK_VERSION,
|
|
35
36
|
LANGFUSE_TRACER_NAME: () => LANGFUSE_TRACER_NAME,
|
|
@@ -37,6 +38,7 @@ __export(index_exports, {
|
|
|
37
38
|
LangfuseAPIError: () => LangfuseAPIError,
|
|
38
39
|
LangfuseAPITimeoutError: () => LangfuseAPITimeoutError,
|
|
39
40
|
LangfuseMedia: () => LangfuseMedia,
|
|
41
|
+
LangfuseOtelContextKeys: () => LangfuseOtelContextKeys,
|
|
40
42
|
LangfuseOtelSpanAttributes: () => LangfuseOtelSpanAttributes,
|
|
41
43
|
LlmAdapter: () => LlmAdapter,
|
|
42
44
|
LogLevel: () => LogLevel,
|
|
@@ -62,6 +64,8 @@ __export(index_exports, {
|
|
|
62
64
|
comments: () => comments_exports,
|
|
63
65
|
commons: () => commons_exports,
|
|
64
66
|
configureGlobalLogger: () => configureGlobalLogger,
|
|
67
|
+
createExperimentId: () => createExperimentId,
|
|
68
|
+
createExperimentItemId: () => createExperimentItemId,
|
|
65
69
|
createLogger: () => createLogger,
|
|
66
70
|
datasetItems: () => datasetItems_exports,
|
|
67
71
|
datasetRunItems: () => datasetRunItems_exports,
|
|
@@ -69,6 +73,7 @@ __export(index_exports, {
|
|
|
69
73
|
generateUUID: () => generateUUID,
|
|
70
74
|
getEnv: () => getEnv,
|
|
71
75
|
getGlobalLogger: () => getGlobalLogger,
|
|
76
|
+
getPropagatedAttributesFromContext: () => getPropagatedAttributesFromContext,
|
|
72
77
|
health: () => health_exports,
|
|
73
78
|
ingestion: () => ingestion_exports,
|
|
74
79
|
llmConnections: () => llmConnections_exports,
|
|
@@ -82,12 +87,14 @@ __export(index_exports, {
|
|
|
82
87
|
projects: () => projects_exports,
|
|
83
88
|
promptVersion: () => promptVersion_exports,
|
|
84
89
|
prompts: () => prompts_exports,
|
|
90
|
+
propagateAttributes: () => propagateAttributes,
|
|
85
91
|
resetGlobalLogger: () => resetGlobalLogger,
|
|
86
92
|
safeSetTimeout: () => safeSetTimeout,
|
|
87
93
|
scim: () => scim_exports,
|
|
88
94
|
score: () => score_exports,
|
|
89
95
|
scoreConfigs: () => scoreConfigs_exports,
|
|
90
96
|
scoreV2: () => scoreV2_exports,
|
|
97
|
+
serializeValue: () => serializeValue,
|
|
91
98
|
sessions: () => sessions_exports,
|
|
92
99
|
trace: () => trace_exports,
|
|
93
100
|
utils: () => utils_exports
|
|
@@ -149,6 +156,24 @@ function base64Decode(input) {
|
|
|
149
156
|
const bytes = base64ToBytes(input);
|
|
150
157
|
return new TextDecoder().decode(bytes);
|
|
151
158
|
}
|
|
159
|
+
async function createExperimentId() {
|
|
160
|
+
const randomBytes = new Uint8Array(8);
|
|
161
|
+
crypto.getRandomValues(randomBytes);
|
|
162
|
+
return Array.from(randomBytes).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
163
|
+
}
|
|
164
|
+
async function createExperimentItemId(input) {
|
|
165
|
+
const serialized = serializeValue(input);
|
|
166
|
+
const data = new TextEncoder().encode(serialized);
|
|
167
|
+
const hashBuffer = await crypto.subtle.digest("SHA-256", data);
|
|
168
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
169
|
+
const hashHex = hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
170
|
+
return hashHex.slice(0, 16);
|
|
171
|
+
}
|
|
172
|
+
function serializeValue(value) {
|
|
173
|
+
if (value === void 0 || value === null) return void 0;
|
|
174
|
+
if (typeof value === "string") return value;
|
|
175
|
+
return JSON.stringify(value);
|
|
176
|
+
}
|
|
152
177
|
|
|
153
178
|
// src/logger/index.ts
|
|
154
179
|
var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
|
|
@@ -325,7 +350,7 @@ var resetGlobalLogger = () => {
|
|
|
325
350
|
// package.json
|
|
326
351
|
var package_default = {
|
|
327
352
|
name: "@langfuse/core",
|
|
328
|
-
version: "4.
|
|
353
|
+
version: "4.4.0",
|
|
329
354
|
description: "Core functions and utilities for Langfuse packages",
|
|
330
355
|
type: "module",
|
|
331
356
|
sideEffects: false,
|
|
@@ -352,6 +377,9 @@ var package_default = {
|
|
|
352
377
|
files: [
|
|
353
378
|
"dist"
|
|
354
379
|
],
|
|
380
|
+
peerDependencies: {
|
|
381
|
+
"@opentelemetry/api": "^1.9.0"
|
|
382
|
+
},
|
|
355
383
|
devDependencies: {
|
|
356
384
|
"@types/node": "^24.1.0"
|
|
357
385
|
}
|
|
@@ -361,6 +389,7 @@ var package_default = {
|
|
|
361
389
|
var LANGFUSE_TRACER_NAME = "langfuse-sdk";
|
|
362
390
|
var LANGFUSE_SDK_VERSION = package_default.version;
|
|
363
391
|
var LANGFUSE_SDK_NAME = "javascript";
|
|
392
|
+
var LANGFUSE_SDK_EXPERIMENT_ENVIRONMENT = "sdk-experiment";
|
|
364
393
|
var LangfuseOtelSpanAttributes = /* @__PURE__ */ ((LangfuseOtelSpanAttributes2) => {
|
|
365
394
|
LangfuseOtelSpanAttributes2["TRACE_NAME"] = "langfuse.trace.name";
|
|
366
395
|
LangfuseOtelSpanAttributes2["TRACE_USER_ID"] = "user.id";
|
|
@@ -387,6 +416,15 @@ var LangfuseOtelSpanAttributes = /* @__PURE__ */ ((LangfuseOtelSpanAttributes2)
|
|
|
387
416
|
LangfuseOtelSpanAttributes2["RELEASE"] = "langfuse.release";
|
|
388
417
|
LangfuseOtelSpanAttributes2["VERSION"] = "langfuse.version";
|
|
389
418
|
LangfuseOtelSpanAttributes2["AS_ROOT"] = "langfuse.internal.as_root";
|
|
419
|
+
LangfuseOtelSpanAttributes2["EXPERIMENT_ID"] = "langfuse.experiment.id";
|
|
420
|
+
LangfuseOtelSpanAttributes2["EXPERIMENT_NAME"] = "langfuse.experiment.name";
|
|
421
|
+
LangfuseOtelSpanAttributes2["EXPERIMENT_DESCRIPTION"] = "langfuse.experiment.description";
|
|
422
|
+
LangfuseOtelSpanAttributes2["EXPERIMENT_METADATA"] = "langfuse.experiment.metadata";
|
|
423
|
+
LangfuseOtelSpanAttributes2["EXPERIMENT_DATASET_ID"] = "langfuse.experiment.dataset.id";
|
|
424
|
+
LangfuseOtelSpanAttributes2["EXPERIMENT_ITEM_ID"] = "langfuse.experiment.item.id";
|
|
425
|
+
LangfuseOtelSpanAttributes2["EXPERIMENT_ITEM_EXPECTED_OUTPUT"] = "langfuse.experiment.item.expected_output";
|
|
426
|
+
LangfuseOtelSpanAttributes2["EXPERIMENT_ITEM_METADATA"] = "langfuse.experiment.item.metadata";
|
|
427
|
+
LangfuseOtelSpanAttributes2["EXPERIMENT_ITEM_ROOT_OBSERVATION_ID"] = "langfuse.experiment.item.root_observation_id";
|
|
390
428
|
LangfuseOtelSpanAttributes2["TRACE_COMPAT_USER_ID"] = "langfuse.user.id";
|
|
391
429
|
LangfuseOtelSpanAttributes2["TRACE_COMPAT_SESSION_ID"] = "langfuse.session.id";
|
|
392
430
|
return LangfuseOtelSpanAttributes2;
|
|
@@ -11442,6 +11480,369 @@ var LangfuseMedia = class {
|
|
|
11442
11480
|
return this.base64DataUri;
|
|
11443
11481
|
}
|
|
11444
11482
|
};
|
|
11483
|
+
|
|
11484
|
+
// src/propagation.ts
|
|
11485
|
+
var import_api = require("@opentelemetry/api");
|
|
11486
|
+
var experimentKeys = [
|
|
11487
|
+
"experimentId",
|
|
11488
|
+
"experimentName",
|
|
11489
|
+
"experimentMetadata",
|
|
11490
|
+
"experimentDatasetId",
|
|
11491
|
+
"experimentItemId",
|
|
11492
|
+
"experimentItemMetadata",
|
|
11493
|
+
"experimentItemRootObservationId"
|
|
11494
|
+
];
|
|
11495
|
+
var LangfuseOtelContextKeys = {
|
|
11496
|
+
userId: (0, import_api.createContextKey)("langfuse_user_id"),
|
|
11497
|
+
sessionId: (0, import_api.createContextKey)("langfuse_session_id"),
|
|
11498
|
+
metadata: (0, import_api.createContextKey)("langfuse_metadata"),
|
|
11499
|
+
version: (0, import_api.createContextKey)("langfuse_version"),
|
|
11500
|
+
tags: (0, import_api.createContextKey)("langfuse_tags"),
|
|
11501
|
+
// Experiments
|
|
11502
|
+
experimentId: (0, import_api.createContextKey)("langfuse_experiment_id"),
|
|
11503
|
+
experimentName: (0, import_api.createContextKey)("langfuse_experiment_name"),
|
|
11504
|
+
experimentMetadata: (0, import_api.createContextKey)("langfuse_experiment_metadata"),
|
|
11505
|
+
experimentDatasetId: (0, import_api.createContextKey)("langfuse_experiment_dataset_id"),
|
|
11506
|
+
experimentItemId: (0, import_api.createContextKey)("langfuse_experiment_item_id"),
|
|
11507
|
+
experimentItemMetadata: (0, import_api.createContextKey)("langfuse_experiment_item_metadata"),
|
|
11508
|
+
experimentItemRootObservationId: (0, import_api.createContextKey)(
|
|
11509
|
+
"langfuse_experiment_item_root_observation_id"
|
|
11510
|
+
)
|
|
11511
|
+
};
|
|
11512
|
+
var LANGFUSE_BAGGAGE_PREFIX = "langfuse_";
|
|
11513
|
+
var LANGFUSE_BAGGAGE_TAGS_SEPARATOR = ",";
|
|
11514
|
+
function propagateAttributes(params, fn) {
|
|
11515
|
+
var _a2;
|
|
11516
|
+
let context = import_api.context.active();
|
|
11517
|
+
const span = import_api.trace.getActiveSpan();
|
|
11518
|
+
const asBaggage = (_a2 = params.asBaggage) != null ? _a2 : false;
|
|
11519
|
+
const { userId, sessionId, metadata, version, tags, _internalExperiment } = params;
|
|
11520
|
+
if (userId) {
|
|
11521
|
+
if (isValidPropagatedString({ value: userId, attributeName: "userId" })) {
|
|
11522
|
+
context = setPropagatedAttribute({
|
|
11523
|
+
key: "userId",
|
|
11524
|
+
value: userId,
|
|
11525
|
+
context,
|
|
11526
|
+
span,
|
|
11527
|
+
asBaggage
|
|
11528
|
+
});
|
|
11529
|
+
}
|
|
11530
|
+
}
|
|
11531
|
+
if (sessionId) {
|
|
11532
|
+
if (isValidPropagatedString({
|
|
11533
|
+
value: sessionId,
|
|
11534
|
+
attributeName: "sessionId"
|
|
11535
|
+
})) {
|
|
11536
|
+
context = setPropagatedAttribute({
|
|
11537
|
+
key: "sessionId",
|
|
11538
|
+
value: sessionId,
|
|
11539
|
+
context,
|
|
11540
|
+
span,
|
|
11541
|
+
asBaggage
|
|
11542
|
+
});
|
|
11543
|
+
}
|
|
11544
|
+
}
|
|
11545
|
+
if (version) {
|
|
11546
|
+
if (isValidPropagatedString({
|
|
11547
|
+
value: version,
|
|
11548
|
+
attributeName: "version"
|
|
11549
|
+
})) {
|
|
11550
|
+
context = setPropagatedAttribute({
|
|
11551
|
+
key: "version",
|
|
11552
|
+
value: version,
|
|
11553
|
+
context,
|
|
11554
|
+
span,
|
|
11555
|
+
asBaggage
|
|
11556
|
+
});
|
|
11557
|
+
}
|
|
11558
|
+
}
|
|
11559
|
+
if (tags && tags.length > 0) {
|
|
11560
|
+
const validTags = tags.filter(
|
|
11561
|
+
(tag) => isValidPropagatedString({
|
|
11562
|
+
value: tag,
|
|
11563
|
+
attributeName: "tag"
|
|
11564
|
+
})
|
|
11565
|
+
);
|
|
11566
|
+
if (validTags.length > 0) {
|
|
11567
|
+
context = setPropagatedAttribute({
|
|
11568
|
+
key: "tags",
|
|
11569
|
+
value: validTags,
|
|
11570
|
+
context,
|
|
11571
|
+
span,
|
|
11572
|
+
asBaggage
|
|
11573
|
+
});
|
|
11574
|
+
}
|
|
11575
|
+
}
|
|
11576
|
+
if (metadata) {
|
|
11577
|
+
const validatedMetadata = {};
|
|
11578
|
+
for (const [key, value] of Object.entries(metadata)) {
|
|
11579
|
+
if (isValidPropagatedString({
|
|
11580
|
+
value,
|
|
11581
|
+
attributeName: `metadata.${key}`
|
|
11582
|
+
})) {
|
|
11583
|
+
validatedMetadata[key] = value;
|
|
11584
|
+
}
|
|
11585
|
+
}
|
|
11586
|
+
if (Object.keys(validatedMetadata).length > 0) {
|
|
11587
|
+
context = setPropagatedAttribute({
|
|
11588
|
+
key: "metadata",
|
|
11589
|
+
value: validatedMetadata,
|
|
11590
|
+
context,
|
|
11591
|
+
span,
|
|
11592
|
+
asBaggage
|
|
11593
|
+
});
|
|
11594
|
+
}
|
|
11595
|
+
}
|
|
11596
|
+
if (_internalExperiment) {
|
|
11597
|
+
for (const [key, value] of Object.entries(_internalExperiment)) {
|
|
11598
|
+
if (value !== void 0) {
|
|
11599
|
+
context = setPropagatedAttribute({
|
|
11600
|
+
key,
|
|
11601
|
+
value,
|
|
11602
|
+
context,
|
|
11603
|
+
span,
|
|
11604
|
+
asBaggage
|
|
11605
|
+
});
|
|
11606
|
+
}
|
|
11607
|
+
}
|
|
11608
|
+
}
|
|
11609
|
+
return import_api.context.with(context, fn);
|
|
11610
|
+
}
|
|
11611
|
+
function getPropagatedAttributesFromContext(context) {
|
|
11612
|
+
const propagatedAttributes = {};
|
|
11613
|
+
const baggage = import_api.propagation.getBaggage(context);
|
|
11614
|
+
if (baggage) {
|
|
11615
|
+
baggage.getAllEntries().forEach(([baggageKey, baggageEntry]) => {
|
|
11616
|
+
if (baggageKey.startsWith(LANGFUSE_BAGGAGE_PREFIX)) {
|
|
11617
|
+
const spanKey = getSpanKeyFromBaggageKey(baggageKey);
|
|
11618
|
+
if (spanKey) {
|
|
11619
|
+
const isMergedTags = baggageKey == getBaggageKeyForPropagatedKey("tags");
|
|
11620
|
+
propagatedAttributes[spanKey] = isMergedTags ? baggageEntry.value.split(LANGFUSE_BAGGAGE_TAGS_SEPARATOR) : baggageEntry.value;
|
|
11621
|
+
}
|
|
11622
|
+
}
|
|
11623
|
+
});
|
|
11624
|
+
}
|
|
11625
|
+
const userId = context.getValue(LangfuseOtelContextKeys["userId"]);
|
|
11626
|
+
if (userId && typeof userId === "string") {
|
|
11627
|
+
const spanKey = getSpanKeyForPropagatedKey("userId");
|
|
11628
|
+
propagatedAttributes[spanKey] = userId;
|
|
11629
|
+
}
|
|
11630
|
+
const sessionId = context.getValue(LangfuseOtelContextKeys["sessionId"]);
|
|
11631
|
+
if (sessionId && typeof sessionId === "string") {
|
|
11632
|
+
const spanKey = getSpanKeyForPropagatedKey("sessionId");
|
|
11633
|
+
propagatedAttributes[spanKey] = sessionId;
|
|
11634
|
+
}
|
|
11635
|
+
const version = context.getValue(LangfuseOtelContextKeys["version"]);
|
|
11636
|
+
if (version && typeof version === "string") {
|
|
11637
|
+
const spanKey = getSpanKeyForPropagatedKey("version");
|
|
11638
|
+
propagatedAttributes[spanKey] = version;
|
|
11639
|
+
}
|
|
11640
|
+
const tags = context.getValue(LangfuseOtelContextKeys["tags"]);
|
|
11641
|
+
if (tags && Array.isArray(tags)) {
|
|
11642
|
+
const spanKey = getSpanKeyForPropagatedKey("tags");
|
|
11643
|
+
propagatedAttributes[spanKey] = tags;
|
|
11644
|
+
}
|
|
11645
|
+
const metadata = context.getValue(LangfuseOtelContextKeys["metadata"]);
|
|
11646
|
+
if (metadata && typeof metadata === "object" && metadata !== null) {
|
|
11647
|
+
for (const [k, v] of Object.entries(metadata)) {
|
|
11648
|
+
const spanKey = `${"langfuse.trace.metadata" /* TRACE_METADATA */}.${k}`;
|
|
11649
|
+
propagatedAttributes[spanKey] = String(v);
|
|
11650
|
+
}
|
|
11651
|
+
}
|
|
11652
|
+
for (const key of experimentKeys) {
|
|
11653
|
+
const contextKey = LangfuseOtelContextKeys[key];
|
|
11654
|
+
const value = context.getValue(contextKey);
|
|
11655
|
+
if (value && typeof value === "string") {
|
|
11656
|
+
const spanKey = getSpanKeyForPropagatedKey(key);
|
|
11657
|
+
propagatedAttributes[spanKey] = value;
|
|
11658
|
+
}
|
|
11659
|
+
}
|
|
11660
|
+
if (propagatedAttributes[getSpanKeyForPropagatedKey("experimentItemRootObservationId")]) {
|
|
11661
|
+
propagatedAttributes["langfuse.environment" /* ENVIRONMENT */] = LANGFUSE_SDK_EXPERIMENT_ENVIRONMENT;
|
|
11662
|
+
}
|
|
11663
|
+
return propagatedAttributes;
|
|
11664
|
+
}
|
|
11665
|
+
function setPropagatedAttribute(params) {
|
|
11666
|
+
const { key, value, span, asBaggage } = params;
|
|
11667
|
+
let context = params.context;
|
|
11668
|
+
let mergedMetadata = key === "metadata" ? getContextMergedMetadata(context, value) : {};
|
|
11669
|
+
let mergedTags = key === "tags" ? getContextMergedTags(context, value) : [];
|
|
11670
|
+
const contextKey = getContextKeyForPropagatedKey(key);
|
|
11671
|
+
if (key === "metadata") {
|
|
11672
|
+
context = context.setValue(contextKey, mergedMetadata);
|
|
11673
|
+
} else if (key === "tags") {
|
|
11674
|
+
context = context.setValue(contextKey, mergedTags);
|
|
11675
|
+
} else {
|
|
11676
|
+
context = context.setValue(contextKey, value);
|
|
11677
|
+
}
|
|
11678
|
+
if (span && span.isRecording()) {
|
|
11679
|
+
if (key === "metadata") {
|
|
11680
|
+
for (const [k, v] of Object.entries(mergedMetadata)) {
|
|
11681
|
+
span.setAttribute(
|
|
11682
|
+
`${"langfuse.trace.metadata" /* TRACE_METADATA */}.${k}`,
|
|
11683
|
+
v
|
|
11684
|
+
);
|
|
11685
|
+
}
|
|
11686
|
+
} else if (key === "tags") {
|
|
11687
|
+
const spanKey = getSpanKeyForPropagatedKey(key);
|
|
11688
|
+
span.setAttribute(spanKey, mergedTags);
|
|
11689
|
+
} else {
|
|
11690
|
+
const spanKey = getSpanKeyForPropagatedKey(key);
|
|
11691
|
+
span.setAttribute(spanKey, value);
|
|
11692
|
+
}
|
|
11693
|
+
}
|
|
11694
|
+
if (asBaggage) {
|
|
11695
|
+
const baggageKey = getBaggageKeyForPropagatedKey(key);
|
|
11696
|
+
let baggage = import_api.propagation.getBaggage(context) || import_api.propagation.createBaggage();
|
|
11697
|
+
if (key === "metadata") {
|
|
11698
|
+
for (const [k, v] of Object.entries(mergedMetadata)) {
|
|
11699
|
+
baggage = baggage.setEntry(`${baggageKey}_${k}`, { value: v });
|
|
11700
|
+
}
|
|
11701
|
+
} else if (key === "tags") {
|
|
11702
|
+
baggage = baggage.setEntry(baggageKey, {
|
|
11703
|
+
value: mergedTags.join(LANGFUSE_BAGGAGE_TAGS_SEPARATOR)
|
|
11704
|
+
});
|
|
11705
|
+
} else {
|
|
11706
|
+
baggage = baggage.setEntry(baggageKey, { value });
|
|
11707
|
+
}
|
|
11708
|
+
context = import_api.propagation.setBaggage(context, baggage);
|
|
11709
|
+
}
|
|
11710
|
+
return context;
|
|
11711
|
+
}
|
|
11712
|
+
function getContextMergedTags(context, newTags) {
|
|
11713
|
+
const existingTags = context.getValue(LangfuseOtelContextKeys["tags"]);
|
|
11714
|
+
if (existingTags && Array.isArray(existingTags)) {
|
|
11715
|
+
return [.../* @__PURE__ */ new Set([...existingTags, ...newTags])];
|
|
11716
|
+
} else {
|
|
11717
|
+
return newTags;
|
|
11718
|
+
}
|
|
11719
|
+
}
|
|
11720
|
+
function getContextMergedMetadata(context, newMetadata) {
|
|
11721
|
+
const existingMetadata = context.getValue(
|
|
11722
|
+
LangfuseOtelContextKeys["metadata"]
|
|
11723
|
+
);
|
|
11724
|
+
if (existingMetadata && typeof existingMetadata === "object" && existingMetadata !== null && !Array.isArray(existingMetadata)) {
|
|
11725
|
+
return { ...existingMetadata, ...newMetadata };
|
|
11726
|
+
} else {
|
|
11727
|
+
return newMetadata;
|
|
11728
|
+
}
|
|
11729
|
+
}
|
|
11730
|
+
function isValidPropagatedString(params) {
|
|
11731
|
+
const logger = getGlobalLogger();
|
|
11732
|
+
const { value, attributeName } = params;
|
|
11733
|
+
if (typeof value !== "string") {
|
|
11734
|
+
logger.warn(
|
|
11735
|
+
`Propagated attribute '${attributeName}' must be a string. Dropping value.`
|
|
11736
|
+
);
|
|
11737
|
+
return false;
|
|
11738
|
+
}
|
|
11739
|
+
if (value.length > 200) {
|
|
11740
|
+
logger.warn(
|
|
11741
|
+
`Propagated attribute '${attributeName}' value is over 200 characters (${value.length} chars). Dropping value.`
|
|
11742
|
+
);
|
|
11743
|
+
return false;
|
|
11744
|
+
}
|
|
11745
|
+
return true;
|
|
11746
|
+
}
|
|
11747
|
+
function getContextKeyForPropagatedKey(key) {
|
|
11748
|
+
return LangfuseOtelContextKeys[key];
|
|
11749
|
+
}
|
|
11750
|
+
function getSpanKeyForPropagatedKey(key) {
|
|
11751
|
+
switch (key) {
|
|
11752
|
+
case "userId":
|
|
11753
|
+
return "user.id" /* TRACE_USER_ID */;
|
|
11754
|
+
case "sessionId":
|
|
11755
|
+
return "session.id" /* TRACE_SESSION_ID */;
|
|
11756
|
+
case "version":
|
|
11757
|
+
return "langfuse.version" /* VERSION */;
|
|
11758
|
+
case "metadata":
|
|
11759
|
+
return "langfuse.trace.metadata" /* TRACE_METADATA */;
|
|
11760
|
+
case "tags":
|
|
11761
|
+
return "langfuse.trace.tags" /* TRACE_TAGS */;
|
|
11762
|
+
case "experimentId":
|
|
11763
|
+
return "langfuse.experiment.id" /* EXPERIMENT_ID */;
|
|
11764
|
+
case "experimentName":
|
|
11765
|
+
return "langfuse.experiment.name" /* EXPERIMENT_NAME */;
|
|
11766
|
+
case "experimentMetadata":
|
|
11767
|
+
return "langfuse.experiment.metadata" /* EXPERIMENT_METADATA */;
|
|
11768
|
+
case "experimentDatasetId":
|
|
11769
|
+
return "langfuse.experiment.dataset.id" /* EXPERIMENT_DATASET_ID */;
|
|
11770
|
+
case "experimentItemId":
|
|
11771
|
+
return "langfuse.experiment.item.id" /* EXPERIMENT_ITEM_ID */;
|
|
11772
|
+
case "experimentItemMetadata":
|
|
11773
|
+
return "langfuse.experiment.item.metadata" /* EXPERIMENT_ITEM_METADATA */;
|
|
11774
|
+
case "experimentItemRootObservationId":
|
|
11775
|
+
return "langfuse.experiment.item.root_observation_id" /* EXPERIMENT_ITEM_ROOT_OBSERVATION_ID */;
|
|
11776
|
+
default: {
|
|
11777
|
+
const fallback = key;
|
|
11778
|
+
throw Error("Unhandled propagated key", fallback);
|
|
11779
|
+
}
|
|
11780
|
+
}
|
|
11781
|
+
}
|
|
11782
|
+
function getBaggageKeyForPropagatedKey(key) {
|
|
11783
|
+
switch (key) {
|
|
11784
|
+
case "userId":
|
|
11785
|
+
return `${LANGFUSE_BAGGAGE_PREFIX}user_id`;
|
|
11786
|
+
case "sessionId":
|
|
11787
|
+
return `${LANGFUSE_BAGGAGE_PREFIX}session_id`;
|
|
11788
|
+
case "version":
|
|
11789
|
+
return `${LANGFUSE_BAGGAGE_PREFIX}version`;
|
|
11790
|
+
case "metadata":
|
|
11791
|
+
return `${LANGFUSE_BAGGAGE_PREFIX}metadata`;
|
|
11792
|
+
case "tags":
|
|
11793
|
+
return `${LANGFUSE_BAGGAGE_PREFIX}tags`;
|
|
11794
|
+
case "experimentId":
|
|
11795
|
+
return `${LANGFUSE_BAGGAGE_PREFIX}experiment_id`;
|
|
11796
|
+
case "experimentName":
|
|
11797
|
+
return `${LANGFUSE_BAGGAGE_PREFIX}experiment_name`;
|
|
11798
|
+
case "experimentMetadata":
|
|
11799
|
+
return `${LANGFUSE_BAGGAGE_PREFIX}experiment_metadata`;
|
|
11800
|
+
case "experimentDatasetId":
|
|
11801
|
+
return `${LANGFUSE_BAGGAGE_PREFIX}experiment_dataset_id`;
|
|
11802
|
+
case "experimentItemId":
|
|
11803
|
+
return `${LANGFUSE_BAGGAGE_PREFIX}experiment_item_id`;
|
|
11804
|
+
case "experimentItemMetadata":
|
|
11805
|
+
return `${LANGFUSE_BAGGAGE_PREFIX}experiment_item_metadata`;
|
|
11806
|
+
case "experimentItemRootObservationId":
|
|
11807
|
+
return `${LANGFUSE_BAGGAGE_PREFIX}experiment_item_root_observation_id`;
|
|
11808
|
+
default: {
|
|
11809
|
+
const fallback = key;
|
|
11810
|
+
throw Error("Unhandled propagated key", fallback);
|
|
11811
|
+
}
|
|
11812
|
+
}
|
|
11813
|
+
}
|
|
11814
|
+
function getSpanKeyFromBaggageKey(baggageKey) {
|
|
11815
|
+
if (!baggageKey.startsWith(LANGFUSE_BAGGAGE_PREFIX)) return;
|
|
11816
|
+
const suffix = baggageKey.slice(LANGFUSE_BAGGAGE_PREFIX.length);
|
|
11817
|
+
if (suffix.startsWith("metadata_")) {
|
|
11818
|
+
const metadataKey = suffix.slice("metadata_".length);
|
|
11819
|
+
return `${"langfuse.trace.metadata" /* TRACE_METADATA */}.${metadataKey}`;
|
|
11820
|
+
}
|
|
11821
|
+
switch (suffix) {
|
|
11822
|
+
case "user_id":
|
|
11823
|
+
return getSpanKeyForPropagatedKey("userId");
|
|
11824
|
+
case "session_id":
|
|
11825
|
+
return getSpanKeyForPropagatedKey("sessionId");
|
|
11826
|
+
case "version":
|
|
11827
|
+
return getSpanKeyForPropagatedKey("version");
|
|
11828
|
+
case "tags":
|
|
11829
|
+
return getSpanKeyForPropagatedKey("tags");
|
|
11830
|
+
case "experiment_id":
|
|
11831
|
+
return getSpanKeyForPropagatedKey("experimentId");
|
|
11832
|
+
case "experiment_name":
|
|
11833
|
+
return getSpanKeyForPropagatedKey("experimentName");
|
|
11834
|
+
case "experiment_metadata":
|
|
11835
|
+
return getSpanKeyForPropagatedKey("experimentMetadata");
|
|
11836
|
+
case "experiment_dataset_id":
|
|
11837
|
+
return getSpanKeyForPropagatedKey("experimentDatasetId");
|
|
11838
|
+
case "experiment_item_id":
|
|
11839
|
+
return getSpanKeyForPropagatedKey("experimentItemId");
|
|
11840
|
+
case "experiment_item_metadata":
|
|
11841
|
+
return getSpanKeyForPropagatedKey("experimentItemMetadata");
|
|
11842
|
+
case "experiment_item_root_observation_id":
|
|
11843
|
+
return getSpanKeyForPropagatedKey("experimentItemRootObservationId");
|
|
11844
|
+
}
|
|
11845
|
+
}
|
|
11445
11846
|
// Annotate the CommonJS export names for ESM import in node:
|
|
11446
11847
|
0 && (module.exports = {
|
|
11447
11848
|
AccessDeniedError,
|
|
@@ -11454,6 +11855,7 @@ var LangfuseMedia = class {
|
|
|
11454
11855
|
CommentObjectType,
|
|
11455
11856
|
DatasetStatus,
|
|
11456
11857
|
Error,
|
|
11858
|
+
LANGFUSE_SDK_EXPERIMENT_ENVIRONMENT,
|
|
11457
11859
|
LANGFUSE_SDK_NAME,
|
|
11458
11860
|
LANGFUSE_SDK_VERSION,
|
|
11459
11861
|
LANGFUSE_TRACER_NAME,
|
|
@@ -11461,6 +11863,7 @@ var LangfuseMedia = class {
|
|
|
11461
11863
|
LangfuseAPIError,
|
|
11462
11864
|
LangfuseAPITimeoutError,
|
|
11463
11865
|
LangfuseMedia,
|
|
11866
|
+
LangfuseOtelContextKeys,
|
|
11464
11867
|
LangfuseOtelSpanAttributes,
|
|
11465
11868
|
LlmAdapter,
|
|
11466
11869
|
LogLevel,
|
|
@@ -11486,6 +11889,8 @@ var LangfuseMedia = class {
|
|
|
11486
11889
|
comments,
|
|
11487
11890
|
commons,
|
|
11488
11891
|
configureGlobalLogger,
|
|
11892
|
+
createExperimentId,
|
|
11893
|
+
createExperimentItemId,
|
|
11489
11894
|
createLogger,
|
|
11490
11895
|
datasetItems,
|
|
11491
11896
|
datasetRunItems,
|
|
@@ -11493,6 +11898,7 @@ var LangfuseMedia = class {
|
|
|
11493
11898
|
generateUUID,
|
|
11494
11899
|
getEnv,
|
|
11495
11900
|
getGlobalLogger,
|
|
11901
|
+
getPropagatedAttributesFromContext,
|
|
11496
11902
|
health,
|
|
11497
11903
|
ingestion,
|
|
11498
11904
|
llmConnections,
|
|
@@ -11506,12 +11912,14 @@ var LangfuseMedia = class {
|
|
|
11506
11912
|
projects,
|
|
11507
11913
|
promptVersion,
|
|
11508
11914
|
prompts,
|
|
11915
|
+
propagateAttributes,
|
|
11509
11916
|
resetGlobalLogger,
|
|
11510
11917
|
safeSetTimeout,
|
|
11511
11918
|
scim,
|
|
11512
11919
|
score,
|
|
11513
11920
|
scoreConfigs,
|
|
11514
11921
|
scoreV2,
|
|
11922
|
+
serializeValue,
|
|
11515
11923
|
sessions,
|
|
11516
11924
|
trace,
|
|
11517
11925
|
utils
|