@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 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.2.1",
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