@langfuse/client 4.3.0 → 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 +79 -36
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +88 -37
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -420,44 +420,86 @@ var ExperimentManager = class {
|
|
|
420
420
|
* @internal
|
|
421
421
|
*/
|
|
422
422
|
async runItem(params) {
|
|
423
|
-
const { item, evaluators = [], task, experimentMetadata
|
|
424
|
-
const { output, traceId, observationId } = await (0, import_tracing.startActiveObservation)(
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
experiment_run_name: params.experimentRunName,
|
|
435
|
-
...experimentMetadata,
|
|
436
|
-
...(_a = item.metadata) != null ? _a : {},
|
|
437
|
-
..."id" in item && "datasetId" in item ? {
|
|
438
|
-
dataset_id: item["datasetId"],
|
|
439
|
-
dataset_item_id: item["id"]
|
|
440
|
-
} : {}
|
|
441
|
-
}
|
|
442
|
-
});
|
|
443
|
-
return { output: output2, traceId: span.traceId, observationId: span.id };
|
|
423
|
+
const { item, evaluators = [], task, experimentMetadata } = params;
|
|
424
|
+
const { output, traceId, observationId, datasetRunId } = await (0, import_tracing.startActiveObservation)("experiment-item-run", async (span) => {
|
|
425
|
+
const input = item.input;
|
|
426
|
+
const expectedOutput = item.expectedOutput;
|
|
427
|
+
const itemMetadata = item.metadata;
|
|
428
|
+
const datasetId = "datasetId" in item ? item.datasetId : void 0;
|
|
429
|
+
const datasetItemId = "id" in item ? item.id : void 0;
|
|
430
|
+
const traceId2 = span.traceId;
|
|
431
|
+
const observationId2 = span.id;
|
|
432
|
+
if (input === void 0) {
|
|
433
|
+
throw new Error("Experiment item is missing input. Skipping item.");
|
|
444
434
|
}
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
435
|
+
let datasetRunId2 = void 0;
|
|
436
|
+
if (datasetItemId) {
|
|
437
|
+
try {
|
|
438
|
+
const result = await this.langfuseClient.api.datasetRunItems.create(
|
|
439
|
+
{
|
|
440
|
+
runName: params.experimentRunName,
|
|
441
|
+
runDescription: params.experimentDescription,
|
|
442
|
+
metadata: params.experimentMetadata,
|
|
443
|
+
datasetItemId,
|
|
444
|
+
traceId: traceId2,
|
|
445
|
+
observationId: observationId2
|
|
446
|
+
}
|
|
447
|
+
);
|
|
448
|
+
datasetRunId2 = result.datasetRunId;
|
|
449
|
+
} catch (err) {
|
|
450
|
+
this.logger.error("Linking dataset run item failed", err);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
const experimentItemId = datasetItemId || await (0, import_core.createExperimentItemId)(input);
|
|
454
|
+
const experimentId = datasetRunId2 || await (0, import_core.createExperimentId)();
|
|
455
|
+
const rootSpanAttributes = {
|
|
456
|
+
[import_core.LangfuseOtelSpanAttributes.ENVIRONMENT]: import_core.LANGFUSE_SDK_EXPERIMENT_ENVIRONMENT
|
|
457
|
+
};
|
|
458
|
+
if (params.experimentDescription) {
|
|
459
|
+
rootSpanAttributes[import_core.LangfuseOtelSpanAttributes.EXPERIMENT_DESCRIPTION] = params.experimentDescription;
|
|
460
|
+
}
|
|
461
|
+
if (expectedOutput !== void 0) {
|
|
462
|
+
const serialized = (0, import_core.serializeValue)(expectedOutput);
|
|
463
|
+
if (serialized) {
|
|
464
|
+
rootSpanAttributes[import_core.LangfuseOtelSpanAttributes.EXPERIMENT_ITEM_EXPECTED_OUTPUT] = serialized;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
span.otelSpan.setAttributes(rootSpanAttributes);
|
|
468
|
+
const output2 = await (0, import_core.propagateAttributes)(
|
|
469
|
+
{
|
|
470
|
+
_internalExperiment: {
|
|
471
|
+
experimentId,
|
|
472
|
+
experimentName: params.experimentRunName,
|
|
473
|
+
experimentMetadata: (0, import_core.serializeValue)(experimentMetadata),
|
|
474
|
+
experimentDatasetId: datasetId,
|
|
475
|
+
experimentItemId,
|
|
476
|
+
experimentItemMetadata: (0, import_core.serializeValue)(itemMetadata),
|
|
477
|
+
experimentItemRootObservationId: span.id
|
|
478
|
+
}
|
|
479
|
+
},
|
|
480
|
+
async () => await task(item)
|
|
459
481
|
);
|
|
460
|
-
|
|
482
|
+
span.update({
|
|
483
|
+
input,
|
|
484
|
+
output: output2,
|
|
485
|
+
metadata: {
|
|
486
|
+
experiment_name: params.experimentName,
|
|
487
|
+
experiment_run_name: params.experimentRunName,
|
|
488
|
+
...experimentMetadata,
|
|
489
|
+
...itemMetadata != null ? itemMetadata : {},
|
|
490
|
+
...datasetId && datasetItemId ? {
|
|
491
|
+
dataset_id: datasetId,
|
|
492
|
+
dataset_item_id: datasetItemId
|
|
493
|
+
} : {}
|
|
494
|
+
}
|
|
495
|
+
});
|
|
496
|
+
return {
|
|
497
|
+
output: output2,
|
|
498
|
+
traceId: traceId2,
|
|
499
|
+
observationId: observationId2,
|
|
500
|
+
datasetRunId: datasetRunId2
|
|
501
|
+
};
|
|
502
|
+
});
|
|
461
503
|
const evalPromises = evaluators.map(
|
|
462
504
|
async (evaluator) => {
|
|
463
505
|
const params2 = {
|
|
@@ -491,6 +533,7 @@ ${JSON.stringify(params2)}
|
|
|
491
533
|
for (const ev of evals) {
|
|
492
534
|
this.langfuseClient.score.create({
|
|
493
535
|
traceId,
|
|
536
|
+
observationId,
|
|
494
537
|
...ev
|
|
495
538
|
});
|
|
496
539
|
}
|