@langfuse/client 5.0.1 → 5.0.2

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
@@ -238,6 +238,7 @@ var ExperimentManager = class {
238
238
  * @param config.maxConcurrency - Maximum number of concurrent task executions (default: 50)
239
239
  *
240
240
  * @returns Promise that resolves to experiment results including:
241
+ * - experimentId: Stable identifier for the experiment execution
241
242
  * - runName: The experiment run name (either provided or generated)
242
243
  * - itemResults: Results for each processed data item
243
244
  * - runEvaluations: Results from run-level evaluators
@@ -290,6 +291,7 @@ var ExperimentManager = class {
290
291
  * @public
291
292
  */
292
293
  async run(config) {
294
+ var _a;
293
295
  const {
294
296
  data,
295
297
  evaluators,
@@ -305,6 +307,7 @@ var ExperimentManager = class {
305
307
  name,
306
308
  runName: providedRunName
307
309
  });
310
+ const fallbackExperimentId = await (0, import_core.createExperimentId)();
308
311
  if (!this.isOtelRegistered()) {
309
312
  this.logger.warn(
310
313
  "OpenTelemetry has not been set up. Traces will not be sent to Langfuse.See our docs on how to set up OpenTelemetry: https://langfuse.com/docs/observability/sdk/typescript/setup#tracing-setup"
@@ -322,6 +325,7 @@ var ExperimentManager = class {
322
325
  experimentRunName: runName,
323
326
  experimentDescription: description,
324
327
  experimentMetadata: metadata,
328
+ fallbackExperimentId,
325
329
  datasetVersion: config.datasetVersion
326
330
  });
327
331
  });
@@ -342,7 +346,10 @@ var ExperimentManager = class {
342
346
  );
343
347
  itemResults.push(...results);
344
348
  }
345
- const datasetRunId = itemResults.length > 0 ? itemResults[0].datasetRunId : void 0;
349
+ const datasetRunId = (_a = itemResults.find(
350
+ (item) => item.datasetRunId
351
+ )) == null ? void 0 : _a.datasetRunId;
352
+ const experimentId = datasetRunId || fallbackExperimentId;
346
353
  let datasetRunUrl = void 0;
347
354
  if (datasetRunId && data.length > 0 && "datasetId" in data[0]) {
348
355
  const datasetId = data[0].datasetId;
@@ -378,13 +385,14 @@ var ExperimentManager = class {
378
385
  }
379
386
  await this.langfuseClient.score.flush();
380
387
  return {
388
+ experimentId,
381
389
  runName,
382
390
  itemResults,
383
391
  datasetRunId,
384
392
  datasetRunUrl,
385
393
  runEvaluations,
386
394
  format: async (options) => {
387
- var _a;
395
+ var _a2;
388
396
  return await this.prettyPrintResults({
389
397
  datasetRunUrl,
390
398
  itemResults,
@@ -393,7 +401,7 @@ var ExperimentManager = class {
393
401
  name: config.name,
394
402
  runName,
395
403
  description: config.description,
396
- includeItemResults: (_a = options == null ? void 0 : options.includeItemResults) != null ? _a : false
404
+ includeItemResults: (_a2 = options == null ? void 0 : options.includeItemResults) != null ? _a2 : false
397
405
  });
398
406
  }
399
407
  };
@@ -458,7 +466,7 @@ var ExperimentManager = class {
458
466
  }
459
467
  }
460
468
  const experimentItemId = datasetItemId || await (0, import_core.createExperimentItemId)(input);
461
- const experimentId = datasetRunId2 || await (0, import_core.createExperimentId)();
469
+ const experimentId = datasetRunId2 || params.fallbackExperimentId;
462
470
  const rootSpanAttributes = {
463
471
  [import_core.LangfuseOtelSpanAttributes.ENVIRONMENT]: import_core.LANGFUSE_SDK_EXPERIMENT_ENVIRONMENT
464
472
  };
@@ -1246,7 +1254,7 @@ var ChatPromptClient = class _ChatPromptClient extends BasePromptClient {
1246
1254
  }
1247
1255
  }
1248
1256
  return messagesWithPlaceholdersReplaced.map((item) => {
1249
- if (typeof item === "object" && item !== null && "role" in item && "content" in item) {
1257
+ if (typeof item === "object" && item !== null && "role" in item && "content" in item && typeof item.content === "string") {
1250
1258
  return {
1251
1259
  ...item,
1252
1260
  content: import_mustache.default.render(item.content, variables != null ? variables : {})