judgeval 1.0.0 → 1.1.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/Judgeval.d.ts +7 -3
- package/dist/Judgeval.d.ts.map +1 -1
- package/dist/agent-judges/AgentJudge.d.ts +19 -0
- package/dist/agent-judges/AgentJudge.d.ts.map +1 -0
- package/dist/agent-judges/AgentJudgeFactory.d.ts +100 -0
- package/dist/agent-judges/AgentJudgeFactory.d.ts.map +1 -0
- package/dist/agent-judges/index.d.ts +3 -0
- package/dist/agent-judges/index.d.ts.map +1 -0
- package/dist/data/Example.d.ts.map +1 -1
- package/dist/datasets/DatasetFactory.d.ts +4 -2
- package/dist/datasets/DatasetFactory.d.ts.map +1 -1
- package/dist/datasets/schema.d.ts +39 -0
- package/dist/datasets/schema.d.ts.map +1 -0
- package/dist/evaluation/Evaluation.d.ts.map +1 -1
- package/dist/evaluation/EvaluatorRunner.d.ts.map +1 -1
- package/dist/index.cjs +5 -5
- package/dist/index.cjs.map +28 -21
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +5 -5
- package/dist/index.mjs.map +28 -21
- package/dist/internal/api/client.d.ts +28 -9
- package/dist/internal/api/client.d.ts.map +1 -1
- package/dist/internal/api/models/AddDatasetItemsResponse.d.ts +5 -0
- package/dist/internal/api/models/AddDatasetItemsResponse.d.ts.map +1 -0
- package/dist/internal/api/models/ApplyTestRunSuccessRequest.d.ts +7 -0
- package/dist/internal/api/models/ApplyTestRunSuccessRequest.d.ts.map +1 -0
- package/dist/internal/api/models/ApplyTestRunSuccessResponse.d.ts +4 -0
- package/dist/internal/api/models/ApplyTestRunSuccessResponse.d.ts.map +1 -0
- package/dist/internal/api/models/CreateOfflineDatasetRequest.d.ts +9 -0
- package/dist/internal/api/models/CreateOfflineDatasetRequest.d.ts.map +1 -0
- package/dist/internal/api/models/CreateOfflineDatasetResponse.d.ts +18 -0
- package/dist/internal/api/models/CreateOfflineDatasetResponse.d.ts.map +1 -0
- package/dist/internal/api/models/CreateTestConfigRequest.d.ts +12 -0
- package/dist/internal/api/models/CreateTestConfigRequest.d.ts.map +1 -0
- package/dist/internal/api/models/CreateTestRunRequest.d.ts +20 -0
- package/dist/internal/api/models/CreateTestRunRequest.d.ts.map +1 -0
- package/dist/internal/api/models/DeleteOfflineDatasetResponse.d.ts +5 -0
- package/dist/internal/api/models/DeleteOfflineDatasetResponse.d.ts.map +1 -0
- package/dist/internal/api/models/DeleteTestConfigResponse.d.ts +5 -0
- package/dist/internal/api/models/DeleteTestConfigResponse.d.ts.map +1 -0
- package/dist/internal/api/models/Example.d.ts +1 -0
- package/dist/internal/api/models/Example.d.ts.map +1 -1
- package/dist/internal/api/models/ExperimentScorer.d.ts +6 -0
- package/dist/internal/api/models/ExperimentScorer.d.ts.map +1 -1
- package/dist/internal/api/models/FetchTestRunViaExperimentAliasResponse.d.ts +42 -0
- package/dist/internal/api/models/FetchTestRunViaExperimentAliasResponse.d.ts.map +1 -0
- package/dist/internal/api/models/InsertOfflineDatasetExamplesRequest.d.ts +4 -0
- package/dist/internal/api/models/InsertOfflineDatasetExamplesRequest.d.ts.map +1 -0
- package/dist/internal/api/models/OfflineDatasetPageResponse.d.ts +44 -0
- package/dist/internal/api/models/OfflineDatasetPageResponse.d.ts.map +1 -0
- package/dist/internal/api/models/OfflineDatasetVersionsResponse.d.ts +13 -0
- package/dist/internal/api/models/OfflineDatasetVersionsResponse.d.ts.map +1 -0
- package/dist/internal/api/models/OfflineTestsLocalScorerResult.d.ts +15 -0
- package/dist/internal/api/models/OfflineTestsLocalScorerResult.d.ts.map +1 -0
- package/dist/internal/api/models/OfflineTestsLogEvalResultsExamplesRequest.d.ts +7 -0
- package/dist/internal/api/models/OfflineTestsLogEvalResultsExamplesRequest.d.ts.map +1 -0
- package/dist/internal/api/models/OfflineTestsLogEvalResultsExamplesResponse.d.ts +4 -0
- package/dist/internal/api/models/OfflineTestsLogEvalResultsExamplesResponse.d.ts.map +1 -0
- package/dist/internal/api/models/OfflineTestsLogEvalResultsRequest.d.ts +7 -0
- package/dist/internal/api/models/OfflineTestsLogEvalResultsRequest.d.ts.map +1 -0
- package/dist/internal/api/models/OfflineTestsLogEvalResultsResponse.d.ts +4 -0
- package/dist/internal/api/models/OfflineTestsLogEvalResultsResponse.d.ts.map +1 -0
- package/dist/internal/api/models/PreparedTestRunResponse.d.ts +70 -0
- package/dist/internal/api/models/PreparedTestRunResponse.d.ts.map +1 -0
- package/dist/internal/api/models/PullAllOfflineDatasetsResponse.d.ts +14 -0
- package/dist/internal/api/models/PullAllOfflineDatasetsResponse.d.ts.map +1 -0
- package/dist/internal/api/models/PullOfflineDatasetResponse.d.ts +24 -0
- package/dist/internal/api/models/PullOfflineDatasetResponse.d.ts.map +1 -0
- package/dist/internal/api/models/SDKCreateAgentJudgeRequest.d.ts +15 -0
- package/dist/internal/api/models/SDKCreateAgentJudgeRequest.d.ts.map +1 -0
- package/dist/internal/api/models/SDKCreateAgentJudgeResponse.d.ts +4 -0
- package/dist/internal/api/models/SDKCreateAgentJudgeResponse.d.ts.map +1 -0
- package/dist/internal/api/models/SDKUpdateAgentJudgeRequest.d.ts +18 -0
- package/dist/internal/api/models/SDKUpdateAgentJudgeRequest.d.ts.map +1 -0
- package/dist/internal/api/models/SDKUpdateAgentJudgeResponse.d.ts +73 -0
- package/dist/internal/api/models/SDKUpdateAgentJudgeResponse.d.ts.map +1 -0
- package/dist/internal/api/models/TestConfigResponse.d.ts +29 -0
- package/dist/internal/api/models/TestConfigResponse.d.ts.map +1 -0
- package/dist/internal/api/models/TestConfigsResponse.d.ts +29 -0
- package/dist/internal/api/models/TestConfigsResponse.d.ts.map +1 -0
- package/dist/internal/api/models/TestRunGraphResponse.d.ts +4 -0
- package/dist/internal/api/models/TestRunGraphResponse.d.ts.map +1 -0
- package/dist/internal/api/models/TestRunItemsResponse.d.ts +41 -0
- package/dist/internal/api/models/TestRunItemsResponse.d.ts.map +1 -0
- package/dist/internal/api/models/TestRunResponse.d.ts +21 -0
- package/dist/internal/api/models/TestRunResponse.d.ts.map +1 -0
- package/dist/internal/api/models/TestRunsResponse.d.ts +20 -0
- package/dist/internal/api/models/TestRunsResponse.d.ts.map +1 -0
- package/dist/internal/api/models/UpdateTestConfigRequest.d.ts +5 -0
- package/dist/internal/api/models/UpdateTestConfigRequest.d.ts.map +1 -0
- package/dist/internal/api/models/UpdateTestRunStatusRequest.d.ts +5 -0
- package/dist/internal/api/models/UpdateTestRunStatusRequest.d.ts.map +1 -0
- package/dist/internal/api/models/index.d.ts +33 -15
- package/dist/internal/api/models/index.d.ts.map +1 -1
- package/dist/offline-tests/OfflineTestRunner.d.ts +58 -0
- package/dist/offline-tests/OfflineTestRunner.d.ts.map +1 -0
- package/dist/offline-tests/OfflineTestsFactory.d.ts +59 -0
- package/dist/offline-tests/OfflineTestsFactory.d.ts.map +1 -0
- package/dist/offline-tests/index.d.ts +4 -0
- package/dist/offline-tests/index.d.ts.map +1 -0
- package/dist/offline-tests/types.d.ts +90 -0
- package/dist/offline-tests/types.d.ts.map +1 -0
- package/dist/offline-tests/utils.d.ts +19 -0
- package/dist/offline-tests/utils.d.ts.map +1 -0
- package/dist/trace/OfflineTracer.d.ts +4 -8
- package/dist/trace/OfflineTracer.d.ts.map +1 -1
- package/dist/trace/baggage/utils.d.ts +1 -3
- package/dist/trace/baggage/utils.d.ts.map +1 -1
- package/dist/trace/exporters/JudgmentSpanExporter.d.ts.map +1 -1
- package/dist/trace/exporters/NoOpSpanExporter.d.ts.map +1 -1
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/retry.d.ts.map +1 -1
- package/dist/utils/serializer.d.ts.map +1 -1
- package/dist/utils/sleep.d.ts +3 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/package.json +5 -5
package/dist/Judgeval.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { EvaluationFactory } from "./evaluation/EvaluationFactory";
|
|
2
2
|
import { DatasetFactory } from "./datasets/DatasetFactory";
|
|
3
|
+
import { AgentJudgeFactory } from "./agent-judges/AgentJudgeFactory";
|
|
4
|
+
import { OfflineTestsFactory } from "./offline-tests/OfflineTestsFactory";
|
|
3
5
|
import type { OfflineTracer, OfflineTracerConfig } from "./trace/OfflineTracer";
|
|
4
6
|
/**
|
|
5
7
|
* Options for {@link Judgeval.offlineTracer}.
|
|
6
|
-
*
|
|
7
|
-
* Mirrors `OfflineTracerConfig` minus credentials and `projectName`,
|
|
8
|
-
* which are reused from the parent `Judgeval` instance.
|
|
8
|
+
* Credentials and `projectName` are taken from the parent `Judgeval` instance.
|
|
9
9
|
*/
|
|
10
10
|
export type JudgevalOfflineTracerOptions = Omit<OfflineTracerConfig, "projectName" | "apiKey" | "organizationId" | "apiUrl">;
|
|
11
11
|
/**
|
|
@@ -85,5 +85,9 @@ export declare class Judgeval {
|
|
|
85
85
|
get datasets(): DatasetFactory;
|
|
86
86
|
/** Access evaluation (create evaluation runs). */
|
|
87
87
|
get evaluation(): EvaluationFactory;
|
|
88
|
+
/** Manage Agent Judges (prompt-based scorers) on the platform. */
|
|
89
|
+
get agentJudges(): AgentJudgeFactory;
|
|
90
|
+
/** Create test configs and run offline tests (dataset + judges). */
|
|
91
|
+
get offlineTests(): OfflineTestsFactory;
|
|
88
92
|
}
|
|
89
93
|
//# sourceMappingURL=Judgeval.d.ts.map
|
package/dist/Judgeval.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Judgeval.d.ts","sourceRoot":"","sources":["../src/Judgeval.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Judgeval.d.ts","sourceRoot":"","sources":["../src/Judgeval.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEhF;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAC7C,mBAAmB,EACnB,aAAa,GAAG,QAAQ,GAAG,gBAAgB,GAAG,QAAQ,CACvD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAE3C,OAAO;IAUP;;;;;;;;;;;;;;;;OAgBG;WACU,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgC9D;;;;;;;;;;;;;;;;OAgBG;IACG,aAAa,CACjB,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,aAAa,CAAC;IAWzB,qDAAqD;IACrD,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAED,kDAAkD;IAClD,IAAI,UAAU,IAAI,iBAAiB,CAMlC;IAED,kEAAkE;IAClE,IAAI,WAAW,IAAI,iBAAiB,CAMnC;IAED,oEAAoE;IACpE,IAAI,YAAY,IAAI,mBAAmB,CAMtC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type ScoreType = "binary" | "numeric" | "categorical";
|
|
2
|
+
export interface AgentJudge {
|
|
3
|
+
judgeId: string;
|
|
4
|
+
name: string;
|
|
5
|
+
prompt: string;
|
|
6
|
+
model: string;
|
|
7
|
+
scoreType: ScoreType;
|
|
8
|
+
description: string | null;
|
|
9
|
+
judgeDescription: string | null;
|
|
10
|
+
categories: {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
}[] | null;
|
|
14
|
+
minScore: number | null;
|
|
15
|
+
maxScore: number | null;
|
|
16
|
+
majorVersion: number | null;
|
|
17
|
+
minorVersion: number | null;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=AgentJudge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentJudge.d.ts","sourceRoot":"","sources":["../../src/agent-judges/AgentJudge.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;AAE7D,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;IAC3D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { JudgmentApiClient } from "../internal/api/client";
|
|
2
|
+
import type { AgentJudge, ScoreType } from "./AgentJudge";
|
|
3
|
+
/**
|
|
4
|
+
* Create and update prompt-based Agent Judges on the Judgment platform.
|
|
5
|
+
*
|
|
6
|
+
* Access via `client.agentJudges`.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const judge = await client.agentJudges.create({
|
|
11
|
+
* name: "helpfulness",
|
|
12
|
+
* prompt: "Rate the assistant's helpfulness from 0 to 1.",
|
|
13
|
+
* model: "gpt-5.2",
|
|
14
|
+
* scoreType: "numeric",
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* await client.agentJudges.update({
|
|
18
|
+
* judgeId: judge.judgeId,
|
|
19
|
+
* prompt: "Updated rubric prompt.",
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare class AgentJudgeFactory {
|
|
24
|
+
private readonly _client;
|
|
25
|
+
private readonly _projectId;
|
|
26
|
+
private readonly _projectName;
|
|
27
|
+
constructor(client: JudgmentApiClient, projectId: string | null, projectName: string);
|
|
28
|
+
/**
|
|
29
|
+
* Create a new Agent Judge (prompt-based scorer).
|
|
30
|
+
*
|
|
31
|
+
* @param options.name - Unique judge name within the project.
|
|
32
|
+
* @param options.prompt - Rubric prompt template used by the agent judge harness.
|
|
33
|
+
* @param options.model - LiteLLM model id (e.g. `"gpt-5.2"`).
|
|
34
|
+
* @param options.scoreType - One of `"numeric"`, `"binary"`, or `"categorical"`.
|
|
35
|
+
* @param options.description - Description stored on the underlying scorer version.
|
|
36
|
+
* @param options.judgeDescription - Description shown in the UI.
|
|
37
|
+
* @param options.categories - Choice list for `categorical` judges.
|
|
38
|
+
* @param options.minScore - Lower bound for `numeric` judges (defaults to `0` server-side).
|
|
39
|
+
* @param options.maxScore - Upper bound for `numeric` judges (defaults to `1` server-side).
|
|
40
|
+
* @returns The newly created `AgentJudge`, or `null` if the project is unresolved.
|
|
41
|
+
*/
|
|
42
|
+
create(options: {
|
|
43
|
+
name: string;
|
|
44
|
+
prompt: string;
|
|
45
|
+
model: string;
|
|
46
|
+
scoreType: ScoreType;
|
|
47
|
+
description?: string;
|
|
48
|
+
judgeDescription?: string;
|
|
49
|
+
categories?: {
|
|
50
|
+
name: string;
|
|
51
|
+
description: string;
|
|
52
|
+
}[];
|
|
53
|
+
minScore?: number;
|
|
54
|
+
maxScore?: number;
|
|
55
|
+
}): Promise<AgentJudge | null>;
|
|
56
|
+
/**
|
|
57
|
+
* Update an existing Agent Judge.
|
|
58
|
+
*
|
|
59
|
+
* Passing any of `prompt`, `model`, `categories`, `minScore`, or
|
|
60
|
+
* `maxScore` writes a new version of the underlying prompt scorer.
|
|
61
|
+
* When `targetMajorVersion` / `targetMinorVersion` are omitted, the
|
|
62
|
+
* server auto-bumps the latest version's minor by 1 — matching the
|
|
63
|
+
* UI's default "save" behaviour.
|
|
64
|
+
*
|
|
65
|
+
* @param options.judgeId - ID of the judge to update.
|
|
66
|
+
* @param options.prompt - New rubric prompt template.
|
|
67
|
+
* @param options.model - New LiteLLM model id.
|
|
68
|
+
* @param options.scoreType - New score type.
|
|
69
|
+
* @param options.description - New scorer-version description.
|
|
70
|
+
* @param options.judgeDescription - New UI-facing description.
|
|
71
|
+
* @param options.categories - New choices for `categorical` judges.
|
|
72
|
+
* @param options.minScore - New lower bound for `numeric` judges.
|
|
73
|
+
* @param options.maxScore - New upper bound for `numeric` judges.
|
|
74
|
+
* @param options.sourceMajorVersion - Major version to copy unspecified fields from.
|
|
75
|
+
* @param options.sourceMinorVersion - Minor version to copy unspecified fields from.
|
|
76
|
+
* @param options.targetMajorVersion - Major version to write to.
|
|
77
|
+
* @param options.targetMinorVersion - Minor version to write to.
|
|
78
|
+
* @returns The updated `AgentJudge`, or `null` if the project is unresolved.
|
|
79
|
+
*/
|
|
80
|
+
update(options: {
|
|
81
|
+
judgeId: string;
|
|
82
|
+
prompt?: string;
|
|
83
|
+
model?: string;
|
|
84
|
+
scoreType?: ScoreType;
|
|
85
|
+
description?: string;
|
|
86
|
+
judgeDescription?: string;
|
|
87
|
+
categories?: {
|
|
88
|
+
name: string;
|
|
89
|
+
description: string;
|
|
90
|
+
}[];
|
|
91
|
+
minScore?: number;
|
|
92
|
+
maxScore?: number;
|
|
93
|
+
sourceMajorVersion?: number;
|
|
94
|
+
sourceMinorVersion?: number;
|
|
95
|
+
targetMajorVersion?: number;
|
|
96
|
+
targetMinorVersion?: number;
|
|
97
|
+
}): Promise<AgentJudge | null>;
|
|
98
|
+
private _expectProjectId;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=AgentJudgeFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentJudgeFactory.d.ts","sourceRoot":"","sources":["../../src/agent-judges/AgentJudgeFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAKhE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAGpC,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,WAAW,EAAE,MAAM;IAOrB;;;;;;;;;;;;;OAaG;IACG,MAAM,CAAC,OAAO,EAAE;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,SAAS,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAwC9B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,MAAM,CAAC,OAAO,EAAE;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAkC9B,OAAO,CAAC,gBAAgB;CASzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent-judges/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Example.d.ts","sourceRoot":"","sources":["../../src/data/Example.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5E;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/D;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,OAAO;IAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;IAEtD,OAAO;IAYP;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO;IAM3D,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"Example.d.ts","sourceRoot":"","sources":["../../src/data/Example.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5E;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/D;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,OAAO;IAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;IAEtD,OAAO;IAYP;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO;IAM3D,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAQ9B;IAEH;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO;IAevC,6BAA6B;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,sCAAsC;IACtC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,sDAAsD;IACtD,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAExC;IAED,wCAAwC;IACxC,MAAM,IAAI,WAAW;CAatB"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { JudgmentApiClient } from "../internal/api/client";
|
|
2
|
-
import type {
|
|
2
|
+
import type { PullAllOfflineDatasetsResponse } from "../internal/api/models";
|
|
3
3
|
import { Example } from "../data/Example";
|
|
4
4
|
import { Dataset } from "./Dataset";
|
|
5
|
+
import { type DatasetSchema } from "./schema";
|
|
5
6
|
/**
|
|
6
7
|
* Creates, retrieves, and lists datasets in your project.
|
|
7
8
|
*
|
|
@@ -38,13 +39,14 @@ export declare class DatasetFactory {
|
|
|
38
39
|
examples?: Example[];
|
|
39
40
|
overwrite?: boolean;
|
|
40
41
|
batchSize?: number;
|
|
42
|
+
schema?: DatasetSchema;
|
|
41
43
|
}): Promise<Dataset | null>;
|
|
42
44
|
/**
|
|
43
45
|
* List all datasets in the project.
|
|
44
46
|
*
|
|
45
47
|
* @returns An array of dataset metadata, or `null` if the project is unresolved.
|
|
46
48
|
*/
|
|
47
|
-
list(): Promise<
|
|
49
|
+
list(): Promise<PullAllOfflineDatasetsResponse | null>;
|
|
48
50
|
private _expectProjectId;
|
|
49
51
|
}
|
|
50
52
|
//# sourceMappingURL=DatasetFactory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatasetFactory.d.ts","sourceRoot":"","sources":["../../src/datasets/DatasetFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"DatasetFactory.d.ts","sourceRoot":"","sources":["../../src/datasets/DatasetFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAoB,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,KAAK,aAAa,EAGnB,MAAM,UAAU,CAAC;AAElB;;;;;;;;;;GAUG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAGpC,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,WAAW,EAAE,MAAM;IAOrB;;;;;OAKG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAkChD;;;;;;;;OAQG;IACG,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QACP,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,aAAa,CAAC;KACnB,GACL,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IA+C1B;;;;OAIG;IACH,IAAI,IAAI,OAAO,CAAC,8BAA8B,GAAG,IAAI,CAAC;IAOtD,OAAO,CAAC,gBAAgB;CASzB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Example } from "../data/Example";
|
|
2
|
+
/**
|
|
3
|
+
* A dataset column type: a JSON Schema primitive or the Judgment pointer type
|
|
4
|
+
* `"trace"` (whose stored value is a trace id rather than literal data).
|
|
5
|
+
*/
|
|
6
|
+
export type DatasetColumnType = "string" | "integer" | "number" | "boolean" | "array" | "object" | "trace";
|
|
7
|
+
/** A single dataset column declaration. */
|
|
8
|
+
export interface DatasetSchemaProperty {
|
|
9
|
+
type: DatasetColumnType;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* A dataset's JSON Schema. Datasets are object-typed with one property per
|
|
13
|
+
* column. A column declared `{ type: "trace" }` (under any name) holds a trace
|
|
14
|
+
* id; at most one trace column is allowed per dataset.
|
|
15
|
+
*/
|
|
16
|
+
export interface DatasetSchema {
|
|
17
|
+
type: "object";
|
|
18
|
+
properties: Record<string, DatasetSchemaProperty>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Validate a dataset JSON Schema client-side before sending. Mirrors the
|
|
22
|
+
* server's structural checks so obvious mistakes fail fast; the server remains
|
|
23
|
+
* the source of truth for full JSON Schema validation.
|
|
24
|
+
*
|
|
25
|
+
* @throws Error if the schema is not an object, does not declare top-level
|
|
26
|
+
* `type: "object"`, lacks a `properties` object, or declares more than one
|
|
27
|
+
* trace-typed column.
|
|
28
|
+
*/
|
|
29
|
+
export declare function validateDatasetSchema(schema: unknown): void;
|
|
30
|
+
/**
|
|
31
|
+
* Infer a JSON Schema from a set of examples. Convenience for
|
|
32
|
+
* `client.datasets.create()` when no explicit schema is supplied. Every
|
|
33
|
+
* example must share the same set of non-null fields; inferred types are JSON
|
|
34
|
+
* Schema primitives only (declare a trace column with an explicit schema).
|
|
35
|
+
*
|
|
36
|
+
* @throws Error if no examples are provided or examples have heterogeneous fields.
|
|
37
|
+
*/
|
|
38
|
+
export declare function inferSchemaFromExamples(examples: Example[]): DatasetSchema;
|
|
39
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/datasets/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GACzB,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,SAAS,GACT,OAAO,GACP,QAAQ,GACR,OAAO,CAAC;AAEZ,2CAA2C;AAC3C,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CACnD;AAID;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA8B3D;AAaD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,aAAa,CAgC1E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Evaluation.d.ts","sourceRoot":"","sources":["../../src/evaluation/Evaluation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"Evaluation.d.ts","sourceRoot":"","sources":["../../src/evaluation/Evaluation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAKxC,MAAM,WAAW,oBAAoB;IACnC,gCAAgC;IAChC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB;;;OAGG;IACH,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IAC5B,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;gBAG9C,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,WAAW,EAAE,MAAM;IAMrB;;;;;;;;OAQG;IACH,GAAG,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CA+C7D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EvaluatorRunner.d.ts","sourceRoot":"","sources":["../../src/evaluation/EvaluatorRunner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACxF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"EvaluatorRunner.d.ts","sourceRoot":"","sources":["../../src/evaluation/EvaluatorRunner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACxF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAK7C;;;;;GAKG;AACH,8BAAsB,eAAe,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK;IAC5D,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAGtC,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,WAAW,EAAE,MAAM;IAOrB,SAAS,CAAC,QAAQ,CAAC,aAAa,CAC9B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,CAAC,EAAE,GACX,oBAAoB;IAEvB,SAAS,CAAC,QAAQ,CAAC,OAAO,CACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,CAAC,EAAE,EACZ,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC;cAEF,KAAK,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;QAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IA+BzD,SAAS,CAAC,eAAe,CACvB,QAAQ,EAAE,OAAO,EAAE,EACnB,WAAW,EAAE,iBAAiB,EAAE,EAChC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,OAAO,GAClB,aAAa,EAAE;IAsEZ,GAAG,CACP,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,CAAC,EAAE,EACZ,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,OAAe,EAC3B,cAAc,GAAE,MAAY,GAC3B,OAAO,CAAC,aAAa,EAAE,CAAC;CA8C5B"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
var zq=Object.create;var{getPrototypeOf:Nq,defineProperty:f1,getOwnPropertyNames:OR,getOwnPropertyDescriptor:Iq}=Object,bR=Object.prototype.hasOwnProperty;var w1=(R,q,E)=>{E=R!=null?zq(Nq(R)):{};let $=q||!R||!R.__esModule?f1(E,"default",{value:R,enumerable:!0}):E;for(let m of OR(R))if(!bR.call($,m))f1($,m,{get:()=>R[m],enumerable:!0});return $},_R=new WeakMap,Lq=(R)=>{var q=_R.get(R),E;if(q)return q;if(q=f1({},"__esModule",{value:!0}),R&&typeof R==="object"||typeof R==="function")OR(R).map(($)=>!bR.call(q,$)&&f1(q,$,{get:()=>R[$],enumerable:!(E=Iq(R,$))||E.enumerable}));return _R.set(R,q),q},vq=(R,q)=>()=>(q||R((q={exports:{}}).exports,q),q.exports);var h1=(R,q)=>{for(var E in q)f1(R,E,{get:q[E],enumerable:!0,configurable:!0,set:($)=>q[E]=()=>$})};var W=(R,q)=>()=>(R&&(q=R(R=0)),q);function x1(R,q){let E=process.env[R];if(!E)return q??null;return E}var c,t,r,JR;var D1=W(()=>{c=x1("JUDGMENT_API_KEY"),t=x1("JUDGMENT_ORG_ID"),r=x1("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),JR=x1("JUDGMENT_LOG_LEVEL","warn")});class d{baseUrl;apiKey;organizationId;constructor(R,q,E){this.baseUrl=R,this.apiKey=q,this.organizationId=E}getBaseUrl(){return this.baseUrl}getApiKey(){return this.apiKey}getOrganizationId(){return this.organizationId}async request(R,q,E){let $=await fetch(q,{method:R,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId},body:E!==void 0?JSON.stringify(E):void 0});if(!$.ok){let m=await $.text();throw Error(`HTTP ${$.status}: ${m}`)}return $.json()}async postOtelV1traces(){let R=this.baseUrl+"/otel/v1/traces";return this.request("POST",R,{})}async postV1projectsResolve(R){let q=this.baseUrl+"/v1/projects/resolve/";return this.request("POST",q,R)}async postV1projects(R){let q=this.baseUrl+"/v1/projects";return this.request("POST",q,R)}async deleteV1projects(R){let q=this.baseUrl+`/v1/projects/${R}`;return this.request("DELETE",q,{})}async postV1projectsDatasets(R,q){let E=this.baseUrl+`/v1/projects/${R}/datasets`;return this.request("POST",E,q)}async getV1projectsDatasets(R){let q=this.baseUrl+`/v1/projects/${R}/datasets`;return this.request("GET",q,void 0)}async postV1projectsDatasetsByDatasetNameExamples(R,q,E){let $=this.baseUrl+`/v1/projects/${R}/datasets/${q}/examples`;return this.request("POST",$,E)}async getV1projectsDatasetsByDatasetName(R,q){let E=this.baseUrl+`/v1/projects/${R}/datasets/${q}`;return this.request("GET",E,void 0)}async postV1projectsEvaluateExamples(R,q){let E=this.baseUrl+`/v1/projects/${R}/evaluate/examples`;return this.request("POST",E,q)}async postV1projectsEvaluateTraces(R,q){let E=this.baseUrl+`/v1/projects/${R}/evaluate/traces`;return this.request("POST",E,q)}async postV1projectsEvalResults(R,q){let E=this.baseUrl+`/v1/projects/${R}/eval-results`;return this.request("POST",E,q)}async postV1projectsEvalResultsExamples(R,q){let E=this.baseUrl+`/v1/projects/${R}/eval-results/examples`;return this.request("POST",E,q)}async getV1projectsExperimentsByRunId(R,q){let E=this.baseUrl+`/v1/projects/${R}/experiments/${q}`;return this.request("GET",E,void 0)}async postV1projectsEvalQueueExamples(R,q){let E=this.baseUrl+`/v1/projects/${R}/eval-queue/examples`;return this.request("POST",E,q)}async postV1projectsEvalQueueTraces(R,q){let E=this.baseUrl+`/v1/projects/${R}/eval-queue/traces`;return this.request("POST",E,q)}async getV1projectsPromptsByName(R,q,E,$){let m=new URLSearchParams;if(E!==void 0)m.set("commit_id",E);if($!==void 0)m.set("tag",$);let P=this.baseUrl+`/v1/projects/${R}/prompts/${q}`+(m.toString()?"?"+m.toString():"");return this.request("GET",P,void 0)}async postV1projectsPrompts(R,q){let E=this.baseUrl+`/v1/projects/${R}/prompts`;return this.request("POST",E,q)}async postV1projectsPromptsByNameTags(R,q,E){let $=this.baseUrl+`/v1/projects/${R}/prompts/${q}/tags`;return this.request("POST",$,E)}async deleteV1projectsPromptsByNameTags(R,q,E){let $=this.baseUrl+`/v1/projects/${R}/prompts/${q}/tags`;return this.request("DELETE",$,E)}async getV1projectsPromptsByNameVersions(R,q){let E=this.baseUrl+`/v1/projects/${R}/prompts/${q}/versions`;return this.request("GET",E,void 0)}async getV1projectsScorers(R,q,E){let $=new URLSearchParams;if(q!==void 0)$.set("names",q);if(E!==void 0)$.set("is_trace",E);let m=this.baseUrl+`/v1/projects/${R}/scorers`+($.toString()?"?"+$.toString():"");return this.request("GET",m,void 0)}async getV1projectsScorersByNameExists(R,q){let E=this.baseUrl+`/v1/projects/${R}/scorers/${q}/exists`;return this.request("GET",E,void 0)}async postV1projectsScorersCustom(R){let q=this.baseUrl+`/v1/projects/${R}/scorers/custom`;return this.request("POST",q,{})}async postV1projectsScorersCustomBundle(R){let q=this.baseUrl+`/v1/projects/${R}/scorers/custom/bundle`;return this.request("POST",q,{})}async getV1projectsScorersCustomByNameExists(R,q){let E=this.baseUrl+`/v1/projects/${R}/scorers/custom/${q}/exists`;return this.request("GET",E,void 0)}async postV1projectsTracesByTraceIdTags(R,q,E){let $=this.baseUrl+`/v1/projects/${R}/traces/${q}/tags`;return this.request("POST",$,E)}async getV1e2eFetchTraceByProjectNameByTraceId(R,q){let E=this.baseUrl+`/v1/e2e_fetch_trace/${R}/${q}`;return this.request("GET",E,void 0)}async getV1e2eTracesPerProject(R,q,E){let $=new URLSearchParams;if(q!==void 0)$.set("limit",q);if(E!==void 0)$.set("offset",E);let m=this.baseUrl+`/v1/e2e_traces_per_project/${R}`+($.toString()?"?"+$.toString():"");return this.request("GET",m,void 0)}async postV1e2eFetchSpanScore(R){let q=this.baseUrl+"/v1/e2e_fetch_span_score/";return this.request("POST",q,R)}}var M1=()=>{};var C;var y=W(()=>{D1();C=class C{static RESET="\x1B[0m";static RED="\x1B[31m";static YELLOW="\x1B[33m";static GRAY="\x1B[90m";static Level={DEBUG:0,INFO:1,WARNING:2,ERROR:3,CRITICAL:4};static initialized=!1;static currentLevel=C.Level.WARNING;static useColor=!0;static initialize(){if(!C.initialized){let R=process.env.JUDGMENT_NO_COLOR;C.useColor=!R&&process.stdout.isTTY;let q=JR.toLowerCase();if(q){let E={debug:C.Level.DEBUG,info:C.Level.INFO,warning:C.Level.WARNING,warn:C.Level.WARNING,error:C.Level.ERROR,critical:C.Level.CRITICAL};C.currentLevel=E[q]??C.Level.WARNING}C.initialized=!0}}static setLevel(R){C.currentLevel=R}static setUseColor(R){C.useColor=R}static log(R,q){if(C.initialize(),R<C.currentLevel)return;let E=new Date().toISOString().replace("T"," ").substring(0,19),$=Object.keys(C.Level).find((F)=>C.Level[F]===R)??"UNKNOWN",m=`${E} - judgeval - ${$} - ${q}`;if(C.useColor)m=`${R===C.Level.DEBUG||R===C.Level.INFO?C.GRAY:R===C.Level.WARNING?C.YELLOW:C.RED}${m}${C.RESET}`;(R>=C.Level.ERROR?process.stderr:process.stdout).write(m+`
|
|
2
|
-
`)}static debug(R){
|
|
3
|
-
${$.stack}`:"";return C.error(`[Caught] An exception was raised in ${R}: ${String($)}${m}`),E}}var O=W(()=>{y()});var lR=W(()=>{O()});function v(R,q={}){let{pre:E,post:$,error:m,finally:P}=q;return async function(...D){let f=E?Y("immutableWrapAsync.pre",()=>E(...D)):void 0,V;try{let Q=await R.apply(this,D);if($)V=Y("immutableWrapAsync.post",()=>$(f,Q,D));return Q}catch(Q){if(m)V=Y("immutableWrapAsync.error",()=>m(f,Q,D));throw Q}finally{if(P)Y("immutableWrapAsync.finally",()=>{P(V)})}}}var sR=W(()=>{O()});var iR=W(()=>{O()});function UR(R,q={}){let{pre:E,yield:$,post:m,error:P,finally:F}=q;return async function*(...f){let V=E?Y("immutableWrapAsyncIterator.pre",()=>E(...f)):void 0,Q;try{for await(let H of R(...f)){if($)Y("immutableWrapAsyncIterator.yield",()=>{$(V,H)});yield H}if(m)Q=Y("immutableWrapAsyncIterator.post",()=>m(V))}catch(H){if(P)Q=Y("immutableWrapAsyncIterator.error",()=>P(V,H));throw H}finally{if(F)Y("immutableWrapAsyncIterator.finally",()=>{F(Q)})}}}var FR=W(()=>{O()});function i(R,q){let E=R[Symbol.asyncIterator].bind(R),$=UR(()=>({[Symbol.asyncIterator]:E}),{yield:(m,P)=>{q.onYield(P)},post:()=>{q.onDone()},error:(m,P)=>{q.onError(P)},finally:()=>{q.onFinally()}});R[Symbol.asyncIterator]=()=>$()}var nR=W(()=>{FR()});var V1=W(()=>{lR();sR();iR();FR();nR()});function W1(R,q){Y("recordChatUsage",()=>{let E=q.prompt_tokens_details?.cached_tokens??0,$=q.prompt_tokens+q.completion_tokens+E;U.recordLLMMetadata({non_cached_input_tokens:$>q.total_tokens?q.prompt_tokens-E:q.prompt_tokens,output_tokens:q.completion_tokens||void 0,cache_read_input_tokens:E||void 0},R),U.setAttribute("judgment.usage.metadata",h(q),R)})}var fR=W(()=>{E1();A();O();L()});function gR(R){R.chat.completions.parse=v(R.chat.completions.parse.bind(R.chat.completions),{pre:(q)=>{let E=U.startSpan("OPENAI_API_CALL");return U.setSpanKind("llm",E),U.recordLLMMetadata({model:q.model},E),U.setInput(q,E),E},post:(q,E)=>{if(!q)return;if(U.setOutput(h(E),q),E.usage)W1(q,E.usage);return U.recordLLMMetadata({model:E.model},q),q},error:(q,E)=>{if(q)U.setError(E,q);return q},finally:(q)=>{q?.end()}})}var cR=W(()=>{A();L();V1();fR()});function tR(R){R.chat.completions.create=v(R.chat.completions.create.bind(R.chat.completions),{pre:(q)=>{if(q.stream)q.stream_options??={include_usage:!0};let E=U.startSpan("OPENAI_API_CALL");return U.setSpanKind("llm",E),U.recordLLMMetadata({model:q.model},E),U.setInput(q,E),{span:E,proxied:!1}},post:(q,E,$)=>{if(!q)return;let{span:m}=q;if($[0].stream){let F=E,D="";return i(F,{onYield(f){if(typeof f.choices[0]?.delta.content==="string")D+=f.choices[0].delta.content;if(f.usage)W1(m,f.usage)},onDone(){U.setOutput(D,m)},onError(f){U.setError(f,m)},onFinally(){m.end()}}),{span:m,proxied:!0}}let P=E;if(U.setOutput(h(P),m),P.usage)W1(m,P.usage);return U.recordLLMMetadata({model:P.model},m),q},error:(q,E)=>{if(q)U.setError(E,q.span);return q},finally:(q)=>{if(q&&!q.proxied)q.span.end()}})}var rR=W(()=>{A();L();V1();fR()});function eR(R,q){Y("images.recordUsage",()=>{let E="input_tokens_details"in q?q.input_tokens_details:void 0,$=E?.image_tokens??0;if(U.recordLLMMetadata({non_cached_input_tokens:E?.text_tokens??0,output_tokens:q.output_tokens||void 0},R),$)U.setAttribute("judgment.usage.non_cached_input_image_tokens",$,R);if(q.output_tokens)U.setAttribute("judgment.usage.output_image_tokens",q.output_tokens,R);U.setAttribute("judgment.usage.metadata",h(q),R)})}function aR(R){R.images.generate=v(R.images.generate.bind(R.images),{pre:(q)=>{let E=U.startSpan("OPENAI_API_CALL");return U.setSpanKind("llm",E),U.recordLLMMetadata({model:q.model},E),U.setInput(q,E),{span:E,proxied:!1}},post:(q,E,$)=>{if(!q)return;let{span:m}=q;if($[0].stream){let F=E,D;return i(F,{onYield(f){if(lq.has(f.type))D=f,eR(m,D.usage)},onDone(){U.setOutput(h(D??{}),m)},onError(f){U.setError(f,m)},onFinally(){m.end()}}),{span:m,proxied:!0}}let P=E;if(U.setOutput(h(P),m),P.usage)eR(m,P.usage);return q},error:(q,E)=>{if(q)U.setError(E,q.span);return q},finally:(q)=>{if(q&&!q.proxied)q.span.end()}})}var lq;var Rq=W(()=>{E1();A();O();L();V1();lq=new Set(["image_generation.completed","image_edit.completed"])});function qq(R,q){Y("responses.recordUsage",()=>{let E=q.input_tokens_details.cached_tokens,$=q.input_tokens+q.output_tokens+E;U.recordLLMMetadata({non_cached_input_tokens:$>q.total_tokens?q.input_tokens-E:q.input_tokens,output_tokens:q.output_tokens||void 0,cache_read_input_tokens:E||void 0},R),U.setAttribute("judgment.usage.metadata",h(q),R)})}function Eq(R){R.responses.create=v(R.responses.create.bind(R.responses),{pre:(q)=>{let E=U.startSpan("OPENAI_API_CALL");return U.setSpanKind("llm",E),U.recordLLMMetadata({model:q.model},E),U.setInput(q,E),{span:E,proxied:!1}},post:(q,E,$)=>{if(!q)return;let{span:m}=q;if($[0].stream){let F=E,D="";return i(F,{onYield(f){if(f.type==="response.output_text.delta")D+=f.delta;if(f.type==="response.completed"){let V=f.response;if(V.usage)qq(m,V.usage);U.recordLLMMetadata({model:V.model},m)}},onDone(){U.setOutput(D,m)},onError(f){U.setError(f,m)},onFinally(){m.end()}}),{span:m,proxied:!0}}let P=E;if(U.setOutput(h(P),m),P.usage)qq(m,P.usage);if(typeof P.model==="string")U.recordLLMMetadata({model:P.model},m);return q},error:(q,E)=>{if(q)U.setError(E,q.span);return q},finally:(q)=>{if(q&&!q.proxied)q.span.end()}})}var $q=W(()=>{E1();A();O();L();V1()});function B1(R){return Y("wrapOpenAI",()=>{tR(R),gR(R),Eq(R),aR(R)}),R}var mq=W(()=>{O();cR();rR();Rq();$q()});function A1(R){return B1(R)}var DR=W(()=>{mq()});function tq(R){return Function.prototype.toString.call(R)}function rq(R){let q=tq(R).replace(cq,"");return q.match(sq)||q.match(iq)}function Pq(R){let q=rq(R);if(!q||!q[1])return[];return q[1].split(nq).map((E)=>{return E.replace(gq,(m,P,F)=>F).trim()}).filter((E)=>E.length>0)}var sq,iq,nq,gq,cq;var Uq=W(()=>{sq=/^([^(]+?)=>/,iq=/^[^(]*\(\s*([^)]*)\)/m,nq=/,/,gq=/^\s*(_?)(\S+?)\1\s*$/,cq=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm});var Fq="=",T1=";",Q1=",",K1="baggage",fq=180,Dq=4096,Cq=8192;function Wq(R){return R.reduce((q,E)=>{let $=`${q}${q!==""?Q1:""}${E}`;return $.length>Cq?q:$},"")}function Qq(R){return R.getAllEntries().map(([q,E])=>{let $=`${encodeURIComponent(q)}=${encodeURIComponent(E.value)}`;if(E.metadata!==void 0)$+=T1+E.metadata.toString();return $})}function Yq(R){let q=R.split(T1);if(q.length<=0)return;let E=q.shift();if(!E)return;let $=E.indexOf(Fq);if($<=0)return;let m=decodeURIComponent(E.substring(0,$).trim()),P=decodeURIComponent(E.substring($+1).trim()),F;if(q.length>0)F=Vq.baggageEntryMetadataFromString(q.join(T1));return{key:m,value:P,metadata:F}}var Vq;var Hq=W(()=>{Vq=require("@opentelemetry/api")});class T{inject(R,q,E){let $=K(R);if(!$||Zq.isTracingSuppressed(R))return;let m=Qq($).filter((F)=>F.length<=Dq).slice(0,fq),P=Wq(m);if(P.length>0)E.set(q,K1,P)}extract(R,q,E){let $=E.get(q,K1),m=Array.isArray($)?$.join(Q1):$;if(!m)return R;let P={};if(m.length===0)return R;if(m.split(Q1).forEach((D)=>{let f=Yq(D);if(f){let V={value:f.value};if(f.metadata)V.metadata=f.metadata;P[f.key]=V}}),Object.entries(P).length===0)return R;return H1(R,Y1(P))}fields(){return[K1]}}var Zq;var o1=W(()=>{Z1();Hq();Zq=require("@opentelemetry/core")});var u1={};h1(u1,{setBaggage:()=>H1,getBaggage:()=>K,getActiveBaggage:()=>eq,deleteBaggage:()=>aq,createBaggage:()=>Y1,baggageEntryMetadataFromString:()=>Sq.baggageEntryMetadataFromString,JudgmentBaggagePropagator:()=>T});function K(R){return R.getValue(CR)??void 0}function eq(){return K(X.getInstance().getCurrentContext())}function H1(R,q){return R.setValue(CR,q)}function aq(R){return R.deleteValue(CR)}var S1,Sq,Y1,CR;var Z1=W(()=>{B();o1();S1=require("@opentelemetry/api"),Sq=require("@opentelemetry/api"),Y1=S1.propagation.createBaggage.bind(S1.propagation),CR=S1.createContextKey("baggage")});var l1={};h1(l1,{setGlobalTextmap:()=>RE,inject:()=>qE,getGlobalTextmap:()=>VR,extract:()=>WR});function VR(){return Xq}function RE(R){Xq=R}function jq(R){if(R!==void 0)return R;return X.getInstance().getCurrentContext()}function qE(R,q,E=p1.defaultTextMapSetter){Y("propagation.inject",()=>{VR().inject(jq(q),R,E)})}function WR(R,q,E=p1.defaultTextMapGetter){let $=jq(q);return Y("propagation.extract",()=>VR().extract($,R,E),$)}var p1,d1,Xq;var QR=W(()=>{O();o1();B();p1=require("@opentelemetry/api"),d1=require("@opentelemetry/core"),Xq=new d1.CompositePropagator({propagators:[new d1.W3CTraceContextPropagator,new T]})});class U{projectName;projectId;apiKey;organizationId;apiUrl;environment;serializer;_tracerProvider;_client;_enableMonitoring;supportsLiveInstrumentation=!0;constructor(R,q,E,$,m,P,F,D,f,V){this.projectName=R,this.projectId=q,this.apiKey=E,this.organizationId=$,this.apiUrl=m,this.environment=P,this.serializer=F,this._tracerProvider=D,this._client=f,this._enableMonitoring=V}setActive(){return X.getInstance().setActive(this)}static _getProxyProvider(){return X.getInstance()}static _getSerializer(){return U._getProxyProvider().getActiveTracer()?.serializer??h}static _getCurrentTraceAndSpanId(){let q=U._getProxyProvider().getCurrentSpan();if(!q?.isRecording())return null;let E=q.spanContext();if(!E.traceId||!(E.traceFlags&1))return null;return[E.traceId,E.spanId]}static _emitPartial(){Y("BaseTracer._emitPartial",()=>{let R=U._getProxyProvider().getActiveTracer();if(!R||!R.supportsLiveInstrumentation)return;R.getSpanProcessor().emitPartial()})}static getCurrentSpan(){return U._getProxyProvider().getCurrentSpan()}static async forceFlush(){await U._getProxyProvider().forceFlush()}static async shutdown(){await U._getProxyProvider().shutdown()}static registerOTELInstrumentation(R){Y("BaseTracer.registerOTELInstrumentation",()=>{U._getProxyProvider().addInstrumentation(R)})}static wrap(R){return A1(R)}static getOTELTracer(){return U._getProxyProvider().getTracer(wq)}static startSpan(R,q){let E=U.getOTELTracer().startSpan(R,{attributes:q});return U._emitPartial(),E}static startActiveSpan(R,q){let{name:E,attributes:$}=R;return U.getOTELTracer().startActiveSpan(E,{attributes:$},(m)=>{U._emitPartial();try{let P=q(m);if(P instanceof Promise)return P.finally(()=>{m.end()});return m.end(),P}catch(P){throw m.end(),P}})}static span(R,q){return U.startActiveSpan({name:R},(E)=>{try{let $=q(E);if($ instanceof Promise)return $.catch((m)=>{throw E.setStatus({code:k.SpanStatusCode.ERROR,message:String(m)}),E.recordException(m),m});return $}catch($){throw E.setStatus({code:k.SpanStatusCode.ERROR,message:String($)}),E.recordException($),$}})}static with(R,q){return U.span(R,q)}static continueTrace(R,q){let E=U._getProxyProvider(),$=WR(R);return E.withContext($,()=>q($))}static observe(R,q){let E;if(typeof R==="function")E=R;else q=R;let{spanType:$="span",spanName:m,recordInput:P=!0,recordOutput:F=!0,fork:D=!1}=q??{},f=U._getProxyProvider(),V=(Q)=>{let H=m??Q.name;return function(...S){let b=f.getTracer(wq);if(D&&f.getActiveTracer()!==null&&f.getCurrentSpan()?.isRecording()===!0){let w=U._getSerializer(),j=b.startSpan(H),I=j.spanContext();if($)j.setAttribute("judgment.span_kind",$);let hR={"judgment.link.source_trace_id":I.traceId,"judgment.link.source_span_id":I.spanId};if($)hR["judgment.span_kind"]=$;let Jq=f.setSpan(f.getCurrentContext(),f.wrapSpanContext(k.INVALID_SPAN_CONTEXT)),g=b.startSpan(H,{attributes:hR},Jq),xR=g.spanContext();j.setAttribute("judgment.link.target_trace_id",xR.traceId),j.setAttribute("judgment.link.target_span_id",xR.spanId);let t1=()=>{g.end(),j.end()},MR=(x)=>{for(let J of[g,j])J.recordException(x),J.setStatus({code:k.SpanStatusCode.ERROR,message:String(x)})},GR=(x)=>{let J=s(x,w);g.setAttribute("judgment.output",J),j.setAttribute("judgment.output",J)};if(P){let x=s(hq(Q,S),w);g.setAttribute("judgment.input",x),j.setAttribute("judgment.input",x)}return U._emitPartial(),f.useSpan(g,!1,!1,!1,()=>{try{let x=Q.call(this,...S);if(x instanceof Promise)return x.then((J)=>{if(F)GR(J);return J}).catch((J)=>{throw MR(J),J}).finally(t1);if(F)GR(x);return t1(),x}catch(x){throw MR(x),t1(),x}})}return b.startActiveSpan(H,(w)=>{if($)w.setAttribute("judgment.span_kind",$);try{if(P)w.setAttribute("judgment.input",s(hq(Q,S),U._getSerializer()));U._emitPartial();let j=Q.call(this,...S);if(j instanceof Promise)return j.then((I)=>{if(F)w.setAttribute("judgment.output",s(I,U._getSerializer()));return I}).catch((I)=>{throw w.recordException(I),w.setStatus({code:k.SpanStatusCode.ERROR,message:String(I)}),I}).finally(()=>{w.end()});if(F)w.setAttribute("judgment.output",s(j,U._getSerializer()));return w.end(),j}catch(j){throw w.recordException(j),w.setStatus({code:k.SpanStatusCode.ERROR,message:String(j)}),w.end(),j}})}};if(!E)return V;return V(E)}static _resolveSpan(R){if(R)return R;return U._getProxyProvider().getCurrentSpan()}static setSpanKind(R,q){Y("BaseTracer.setSpanKind",()=>{if(!R)return;let E=U._resolveSpan(q);if(E?.isRecording())E.setAttribute("judgment.span_kind",R)})}static setLLMSpan(){U.setSpanKind("llm")}static setToolSpan(){U.setSpanKind("tool")}static setGeneralSpan(){U.setSpanKind("span")}static setAttribute(R,q,E){Y("BaseTracer.setAttribute",()=>{let $=U._resolveSpan(E);if(!$?.isRecording())return;if(!R||q==null)return;$.setAttribute(R,s(q,U._getSerializer()))})}static setAttributes(R,q){for(let[E,$]of Object.entries(R))if(q)U.setAttribute(E,$,q);else U.setAttribute(E,$)}static setInput(R,q){if(q)U.setAttribute("judgment.input",R,q);else U.setAttribute("judgment.input",R)}static setOutput(R,q){if(q)U.setAttribute("judgment.output",R,q);else U.setAttribute("judgment.output",R)}static setError(R,q){Y("BaseTracer.setError",()=>{let E=U._resolveSpan(q);if(!E?.isRecording())return;E.recordException(R),E.setStatus({code:k.SpanStatusCode.ERROR,message:String(R)})})}static recordLLMMetadata(R,q){Y("BaseTracer.recordLLMMetadata",()=>{let E=U._resolveSpan(q);if(!E?.isRecording())return;if(typeof R.model==="string")E.setAttribute("judgment.llm.model",R.model);if(typeof R.provider==="string")E.setAttribute("judgment.llm.provider",R.provider);if(typeof R.non_cached_input_tokens==="number")E.setAttribute("judgment.usage.non_cached_input_tokens",R.non_cached_input_tokens);if(typeof R.output_tokens==="number")E.setAttribute("judgment.usage.output_tokens",R.output_tokens);if(typeof R.cache_read_input_tokens==="number")E.setAttribute("judgment.usage.cache_read_input_tokens",R.cache_read_input_tokens);if(typeof R.cache_creation_input_tokens==="number")E.setAttribute("judgment.usage.cache_creation_input_tokens",R.cache_creation_input_tokens);if(typeof R.total_cost_usd==="number")E.setAttribute("judgment.usage.total_cost_usd",R.total_cost_usd)})}static _setPropagatingBaggageKey(R,q){Y("BaseTracer._setPropagatingBaggageKey",()=>{let E=U._getProxyProvider(),$=E.getCurrentSpan();if(!$?.isRecording())return;$.setAttribute(R,q);let m=E.getCurrentContext(),P=(K(m)??Y1()).setEntry(R,{value:q});E.attachContext(H1(m,P))})}static setCustomerId(R){U._setPropagatingBaggageKey("judgment.customer_id",R)}static setCustomerUserId(R){U._setPropagatingBaggageKey("judgment.customer_user_id",R)}static setSessionId(R){U._setPropagatingBaggageKey("judgment.session_id",R)}static tag(R){Y("BaseTracer.tag",()=>{if(!R||Array.isArray(R)&&R.length===0)return;let E=U._getProxyProvider().getActiveTracer();if(!E?.projectId||!E._client)return;if(!E.supportsLiveInstrumentation)return;let $=U._getCurrentTraceAndSpanId();if(!$)return;let[m]=$,P=Array.isArray(R)?R:[R];E._client.postV1projectsTracesByTraceIdTags(E.projectId,m,{tags:P}).catch((F)=>{C.error(`tag failed: ${String(F)}`)})})}static asyncEvaluate(R,q){Y("BaseTracer.asyncEvaluate",()=>{let{judge:E,example:$}=R,P=U._getProxyProvider().getActiveTracer();if(!P?.projectId)return;if(!P.supportsLiveInstrumentation)return;let F=U._resolveSpan(q);if(!F?.isRecording())return;let D=P.getSpanProcessor(),f=F.spanContext(),V=D.stateIncr(f,"pending_evals_count"),Q={project_id:P.projectId,eval_name:`async_evaluate_${E}_${V}`,judges:[{name:E}],examples:[{...$,example_id:xq.randomUUID(),created_at:new Date().toISOString(),trace_id:f.traceId,span_id:f.spanId}],is_offline:!1,is_behavior:!1},H=D.stateAppend(f,"pending_evals",Q);F.setAttribute("judgment.pending_trace_eval",JSON.stringify(H))})}}function hq(R,q){try{let E=Pq(R).map((m)=>m.replace(/^\.\.\./,"").split("=")[0].trim()).filter((m)=>m.length>0),$={};return E.forEach((m,P)=>{if(P<q.length)$[m]=q[P]}),$}catch{return{}}}var k,xq,wq="judgeval";var A=W(()=>{E1();DR();Uq();O();y();L();Z1();B();QR();k=require("@opentelemetry/api"),xq=require("crypto")});class N{_delegate;constructor(R,q,E,$){this._delegate=new Mq.OTLPTraceExporter({url:R,headers:{Authorization:`Bearer ${q}`,"X-Organization-Id":E,"X-Project-Id":$}})}export(R,q){C.info(`Exported ${R.length} spans`),this._delegate?.export(R,q)}shutdown(){return this._delegate?.shutdown()??Promise.resolve()}forceFlush(){return this._delegate?.forceFlush()??Promise.resolve()}}var Mq;var X1=W(()=>{y();Mq=require("@opentelemetry/exporter-trace-otlp-http")});var Gq,o;var s1=W(()=>{X1();Gq=require("@opentelemetry/core");o=class o extends N{constructor(){super("https://api.judgmentlabs.ai/otel/v1/traces","","","");this._delegate=null}export(R,q){q({code:Gq.ExportResultCode.SUCCESS})}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}}});class $1{_keyPredicate;constructor(R=i1){this._keyPredicate=R}onStart(R,q){let E=K(q)?.getAllEntries()??[];for(let[$,m]of E)if(this._keyPredicate($))R.setAttribute($,m.value)}onEnd(R){}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}var i1=()=>!0;var YR=W(()=>{Z1()});function m1(R){return`${R.traceId}:${R.spanId}`}function $E(R){return R[0]===0&&R[1]===0}var _q,u;var j1=W(()=>{E1();O();B();YR();_q=require("@opentelemetry/sdk-trace-base");u=class u extends _q.BatchSpanProcessor{tracer;_state=new Map;_spanFinalizers;_baggageProcessor;constructor(R,q,E){super(q,E);this.tracer=R,this._spanFinalizers=new FinalizationRegistry(($)=>{this._cleanupSpanState($)}),this._baggageProcessor=new $1}_cleanupSpanState(R){this._state.delete(R)}_registerSpan(R){let q=R.spanContext();if(!q.traceId||!q.spanId)return;let E=m1(q);this._spanFinalizers.register(R,E)}stateSet(R,q,E){let $=m1(R),m=this._state.get($);if(!m)m=new Map,this._state.set($,m);m.set(q,E)}stateGet(R,q,E){let $=m1(R),m=this._state.get($);if(!m?.has(q))return E;return m.get(q)}stateIncr(R,q){let E=m1(R),$=this._state.get(E);if(!$)$=new Map,this._state.set(E,$);let m=$.get(q),P=typeof m==="number"?m:0;return $.set(q,P+1),P}stateAppend(R,q,E){let $=m1(R),m=this._state.get($);if(!m)m=new Map,this._state.set($,m);let P=m.get(q),F=Array.isArray(P)?[...P,E]:[E];return m.set(q,F),F}_emitSpan(R,q=!1){let E=R.spanContext();if(!E.traceId)return;let $=this.stateIncr(E,"judgment.update_id"),m={...R.attributes,"judgment.update_id":$};if(q)delete m["judgment.pending_trace_eval"];let P=Object.create(R);Object.defineProperty(P,"attributes",{value:m,writable:!1});let F=$E(R.endTime)?R.startTime:R.endTime;Object.defineProperty(P,"endTime",{value:F,writable:!1}),super.onEnd(P)}emitPartial(){Y("JudgmentSpanProcessor.emitPartial",()=>{let q=X.getInstance().getCurrentSpan();if(!q?.isRecording())return;let E=q.spanContext();if(!E.traceId)return;if(this.stateGet(E,"disable_partial_emit",!1))return;this._emitSpan(q,!0)})}onStart(R,q){Y("JudgmentSpanProcessor.onStart",()=>{this._baggageProcessor.onStart(R,q),this._registerSpan(R)})}onEnd(R){Y("JudgmentSpanProcessor.onEnd",()=>{let q=R.spanContext();if(!q.traceId){super.onEnd(R);return}let E=m1(q);try{if(!this.stateGet(q,"cancelled",!1))this._emitSpan(R)}finally{this._cleanupSpanState(E)}})}}});var P1;var HR=W(()=>{s1();j1();P1=class P1 extends u{constructor(){super(null,new o)}onStart(R,q){}onEnd(R){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}emitPartial(){}stateSet(R,q,E){}stateGet(R,q,E){return E}stateIncr(R,q){return 0}stateAppend(R,q,E){return[E]}}});var n1,ZR,n;var SR=W(()=>{D1();M1();y();G1();L();qR();A();B();X1();s1();j1();HR();n1=require("@opentelemetry/resources"),ZR=require("@opentelemetry/sdk-trace-node");n=class n extends U{_spanExporter=null;_spanProcessor=null;constructor(R,q,E,$,m,P,F,D,f,V){super(R,q,E,$,m,P,F,D,f,V)}static async init(R={}){let q=R.apiKey??c,E=R.organizationId??t,$=R.apiUrl??r,m=R.projectName??null,P=R.serializer??h,F=!0;if(!m)C.warning("project_name not provided. Tracer will not export spans."),F=!1;if(!q)C.warning("api_key not provided. Tracer will not export spans."),F=!1;if(!E)C.warning("organization_id not provided. Tracer will not export spans."),F=!1;if(!$)C.warning("api_url not provided. Tracer will not export spans."),F=!1;let D=null,f=null;if(F&&m&&q&&E&&$){if(D=new d($,q,E),f=await e(D,m).catch(()=>null),!f)C.warning(`Project '${m}' not found. Tracer will not export spans.`),F=!1}let V={"service.name":m??"unknown","telemetry.sdk.name":"judgeval","telemetry.sdk.version":L1};if(R.environment)V["deployment.environment"]=R.environment;if(R.resourceAttributes)Object.assign(V,R.resourceAttributes);let Q=n1.defaultResource().merge(n1.resourceFromAttributes(V)),H=new ZR.NodeTracerProvider({resource:Q,sampler:R.sampler,spanLimits:R.spanLimits}),S=new n(m,f,q,E,$,R.environment??null,P,H,D,F);if(F){let _=new ZR.NodeTracerProvider({resource:Q,sampler:R.sampler,spanLimits:R.spanLimits,spanProcessors:[S.getSpanProcessor(),...R.spanProcessors??[]]});S._tracerProvider=_}if(X.getInstance().register(S),R.setActive??!0)S.setActive();return S}getSpanExporter(){if(this._spanExporter)return this._spanExporter;if(!this._enableMonitoring||!this.projectId||!this.apiKey||!this.organizationId||!this.apiUrl)this._spanExporter=new o;else{let R=this.apiUrl.endsWith("/")?this.apiUrl+"otel/v1/traces":this.apiUrl+"/otel/v1/traces";this._spanExporter=new N(R,this.apiKey,this.organizationId,this.projectId)}return this._spanExporter}getSpanProcessor(){if(this._spanProcessor)return this._spanProcessor;if(!this._enableMonitoring)this._spanProcessor=new P1;else this._spanProcessor=new u(this,this.getSpanExporter());return this._spanProcessor}}});var U1;var XR=W(()=>{C1();j1();U1=class U1 extends u{_dataset;_exampleFields;_seenTraceIds=new Set;constructor(R,q,E){super(R,q);this._dataset=E.dataset,this._exampleFields={...E.exampleFields??{}}}_maybeCreateExample(R){if(R.parentSpanContext)return;let q=R.spanContext();if(!q?.traceId)return;if(this._seenTraceIds.has(q.traceId))return;this._seenTraceIds.add(q.traceId);let E=G.create({...this._exampleFields,offline_trace_id:q.traceId});this._dataset.push(E)}onEnd(R){try{this._maybeCreateExample(R)}finally{super.onEnd(R)}}}});var bq={};h1(bq,{OfflineTracer:()=>F1});var g1,jR,Oq="otel/v1/offline-traces",F1;var wR=W(()=>{D1();M1();G1();L();qR();B();SR();X1();XR();g1=require("@opentelemetry/resources"),jR=require("@opentelemetry/sdk-trace-node");F1=class F1 extends n{supportsLiveInstrumentation=!1;_offlineApiUrl;_offlineApiKey;_offlineOrganizationId;_offlineProjectId;_dataset;_exampleFields;_offlineSpanExporter=null;_offlineSpanProcessor=null;constructor(R){super(R.projectName,R.projectId,R.apiKey,R.organizationId,R.apiUrl,R.environment,R.serializer,R.tracerProvider,R.client,!0);this._offlineApiUrl=R.apiUrl,this._offlineApiKey=R.apiKey,this._offlineOrganizationId=R.organizationId,this._offlineProjectId=R.projectId,this._dataset=R.dataset,this._exampleFields=R.exampleFields}static async create(R){let q=R.apiKey??c,E=R.organizationId??t,$=R.apiUrl??r,m=R.projectName,P=R.serializer??h;if(!m)throw Error("projectName is required for OfflineTracer");if(!q)throw Error("apiKey is required for OfflineTracer");if(!E)throw Error("organizationId is required for OfflineTracer");if(!$)throw Error("apiUrl is required for OfflineTracer");let F=new d($,q,E),D;try{D=await e(F,m)}catch(b){throw Error(`Project '${m}' not found; cannot start OfflineTracer: ${String(b)}`)}let f={"service.name":m,"telemetry.sdk.name":"judgeval","telemetry.sdk.version":L1,"judgment.offline":"true"};if(R.environment)f["deployment.environment"]=R.environment;if(R.resourceAttributes)Object.assign(f,R.resourceAttributes);let V=g1.defaultResource().merge(g1.resourceFromAttributes(f)),Q=new F1({projectName:m,projectId:D,apiKey:q,organizationId:E,apiUrl:$,environment:R.environment??null,serializer:P,tracerProvider:new jR.NodeTracerProvider({resource:V}),client:F,dataset:R.dataset,exampleFields:{...R.exampleFields??{}}}),H=new jR.NodeTracerProvider({resource:V,sampler:R.sampler,spanLimits:R.spanLimits,spanProcessors:[Q.getSpanProcessor(),...R.spanProcessors??[]]});if(Q._tracerProvider=H,X.getInstance().register(Q),R.setActive??!0)Q.setActive();return Q}getSpanExporter(){if(this._offlineSpanExporter)return this._offlineSpanExporter;let R=this._offlineApiUrl.endsWith("/")?this._offlineApiUrl+Oq:this._offlineApiUrl+"/"+Oq;return this._offlineSpanExporter=new N(R,this._offlineApiKey,this._offlineOrganizationId,this._offlineProjectId),this._offlineSpanExporter}getSpanProcessor(){if(this._offlineSpanProcessor)return this._offlineSpanProcessor;return this._offlineSpanProcessor=new U1(this,this.getSpanExporter(),{dataset:this._dataset,exampleFields:this._exampleFields}),this._offlineSpanProcessor}}});var mE={};h1(mE,{wrapOpenAI:()=>B1,wrap:()=>A1,propagation:()=>l1,baggage:()=>u1,Tracer:()=>n,OfflineTracer:()=>F1,OfflineJudgmentSpanProcessor:()=>U1,NoOpSpanProcessor:()=>P1,NoOpSpanExporter:()=>o,JudgmentTracerProvider:()=>X,JudgmentSpanExporter:()=>N,JudgmentBaggageSpanProcessor:()=>$1,JudgmentBaggagePropagator:()=>T,Judgeval:()=>c1,Judge:()=>a,Example:()=>G,Evaluation:()=>q1,Dataset:()=>l,BaseTracer:()=>U,ALLOW_ALL_BAGGAGE_KEYS:()=>i1});module.exports=Lq(mE);D1();M1();G1();class a{}var a1=w1(b1(),1);var Z=w1(b1(),1),Aq=2000;class R1{_client;_projectId;_projectName;constructor(R,q,E){this._client=R,this._projectId=q,this._projectName=E}async _poll(R,q,E,$){let m=Date.now();while(!0){let P=(Date.now()-m)/1000;if(P>$)throw Error(`Evaluation timed out after ${$}s`);let F=await this._client.getV1projectsExperimentsByRunId(R,q),D=F.results??[];if(D.length>=E){let V=F.ui_results_url??"Failed to get UI results URL";return console.log(`${Z.default.green("✓")} Evals completed and saved in ${Z.default.bold(`${P.toFixed(1)}s`)}`),{results:D,url:V}}await new Promise((V)=>setTimeout(V,Aq))}}_displayResults(R,q,E,$){let m=[],P=0,F=0;console.log();for(let D=0;D<q.length;D++){let f=q[D],V=f.scorers.every((Q)=>Boolean(Q.success));if(V)P++,console.log(`${Z.default.green("✓")} Example ${D+1}: ${Z.default.green("PASSED")}`);else F++,console.log(`${Z.default.red("✗")} Example ${D+1}: ${Z.default.red("FAILED")}`);for(let Q of f.scorers){let H=Q.score!==null?Q.score.toFixed(3):"N/A",S=Q.success?Z.default.green(H):Z.default.red(H);console.log(` ${Z.default.dim(`${Q.name}:`)} ${S} ${Z.default.dim(`(threshold: ${Q.threshold})`)}`)}m.push({success:V,scorers:f.scorers,example:R[D]})}if(console.log(),P===m.length)console.log(`${Z.default.bold(Z.default.green("✓ All tests passed!"))} (${P}/${m.length})`);else console.log(`${Z.default.bold(Z.default.yellow("⚠ Results:"))} ${Z.default.green(`${P} passed`)} | ${Z.default.red(`${F} failed`)}`);if(console.log(`${Z.default.dim("View full details:")} ${Z.default.underline(E)}`),console.log(),$&&m.some((D)=>!D.success)){let D=[`Evaluation failed: ${F}/${m.length} examples failed`];for(let f=0;f<m.length;f++)if(!m[f].success){D.push(` Example ${f+1}:`);for(let V of m[f].scorers)if(!V.success){if(D.push(` ${V.name}: ${V.score!==null?V.score.toFixed(3):"N/A"} (threshold: ${V.threshold})`),V.reason)D.push(` ${V.reason}`)}}throw Error(D.join(`
|
|
4
|
-
`))}return m}async run(R,q,E,$=!1,m=300){if(!this._projectId)return console.error("Project ID is not resolved. Evaluation requires a valid project."),[];let P=this._projectId,F=crypto.randomUUID(),D=new Date().toISOString();console.log(),console.log(Z.default.bold(Z.default.cyan("Starting Evaluation"))),console.log(`${Z.default.dim("Run:")} ${E}`),console.log(`${Z.default.dim("Project:")} ${this._projectName}`),console.log(`${Z.default.dim("Examples:")} ${R.length} | ${Z.default.dim("Scorers:")} ${q.length}`),console.log();let f=this._buildPayload(F,P,E,D,R,q),V=await this._submit(P,F,R,q,f),{results:Q,url:H}=await this._poll(P,F,V,m);return this._displayResults(R,Q,H,$)}}class J1 extends R1{_buildPayload(R,q,E,$,m,P){return{id:R,project_id:q,eval_name:E,created_at:$,examples:m.map((F)=>F.toJSON()),judgment_scorers:[],custom_scorers:[]}}async _submit(R,q,E,$,m){let P=Date.now(),F=E.flatMap((H,S)=>$.map((b)=>b.score(H).then((_)=>({exampleIdx:S,scorer:b,result:_,error:null})).catch((_)=>({exampleIdx:S,scorer:b,result:null,error:String(_)})))),D=await Promise.all(F),f=((Date.now()-P)/1000).toFixed(1);console.log(`${a1.default.green("✓")} Scoring completed in ${a1.default.bold(`${f}s`)}`);let V=new Map;for(let H of D){let S=V.get(H.exampleIdx);if(!S)S=[],V.set(H.exampleIdx,S);S.push(H)}let Q=E.map((H,S)=>{return{scorers_data:(V.get(S)??[]).map((_)=>{if(_.error!==null)return{scorer_name:_.scorer.constructor.name,value:0,reason:"",error:_.error};let w=_.result;return{scorer_name:_.scorer.constructor.name,value:w.value,reason:w.reason,...w.citations&&{citations:w.citations.map((j)=>({span_id:j.spanId,span_attribute:j.spanAttribute}))}}}),data_object:H.toJSON()}});return await this._client.postV1projectsEvalResultsExamples(R,{results:Q,run:m}),E.length}}var vR=w1(b1(),1);class z1 extends R1{_buildPayload(R,q,E,$,m,P){return{id:R,project_id:q,eval_name:E,created_at:$,examples:m.map((F)=>F.toJSON()),judgment_scorers:P.map((F)=>({name:F})),custom_scorers:[]}}async _submit(R,q,E,$,m){return await this._client.postV1projectsEvalQueueExamples(R,m),console.log(`${vR.default.green("✓")} Evaluation submitted`),E.length}}class q1{_local;_hosted;constructor(R,q,E){this._local=new J1(R,q,E),this._hosted=new z1(R,q,E)}run(R){let{examples:q,scorers:E,evalRunName:$,assertTest:m=!1,timeoutSeconds:P=300}=R,F=E.filter((f)=>typeof f==="string"),D=E.filter((f)=>f instanceof a);if(D.length>0&&F.length>0)return console.error("Running both local and hosted scorers is not supported. Please run your evaluation with either local or hosted scorers, but not both."),Promise.resolve([]);if(D.length===0&&F.length===0)return console.error("No valid local or hosted scorers provided. Please provide at least one local or hosted scorer."),Promise.resolve([]);if(D.length>0)return this._local.run(q,D,$,m,P);return this._hosted.run(q,F,$,m,P)}}class N1{_client;_projectId;_projectName;constructor(R,q,E){this._client=R,this._projectId=q,this._projectName=E}create(){return new q1(this._client,this._projectId,this._projectName)}}C1();C1();class l{name;projectId;projectName;datasetKind;examples;_client;constructor(R){this.name=R.name,this.projectId=R.projectId,this.projectName=R.projectName,this.datasetKind=R.datasetKind??"example",this.examples=R.examples??[],this._client=R.client??null}async addExamples(R,q=100){if(!this._client)return;for(let E=0;E<R.length;E+=q){let $=R.slice(E,E+q);await this._client.postV1projectsDatasetsByDatasetNameExamples(this.projectId,this.name,{examples:$.map((m)=>m.toJSON())})}}async addFromJson(R,q=100){let $=(await import("fs")).readFileSync(R,"utf-8"),P=JSON.parse($).map((F)=>{if(typeof F!=="object"||F===null)throw Error("Each item in the JSON array must be an object");return G.create(F)});await this.addExamples(P,q)}get length(){return this.examples.length}[Symbol.iterator](){return this.examples[Symbol.iterator]()}toString(){return`Dataset(name=${this.name}, examples=${this.examples.length})`}}class I1{_client;_projectId;_projectName;constructor(R,q,E){this._client=R,this._projectId=q,this._projectName=E}async get(R){let q=this._expectProjectId();if(!q)return null;let E=await this._client.getV1projectsDatasetsByDatasetName(q,R),$=E.dataset_kind??"example",P=(E.examples??[]).map((F)=>G.from(F));return new l({name:R,projectId:q,projectName:this._projectName,datasetKind:$,examples:P,client:this._client})}async create(R,q={}){let E=this._expectProjectId();if(!E)return null;let{examples:$=[],overwrite:m=!1,batchSize:P=100}=q;await this._client.postV1projectsDatasets(E,{name:R,examples:[],dataset_kind:"example",overwrite:m});let F=new l({name:R,projectId:E,projectName:this._projectName,examples:$,client:this._client});if($.length>0)await F.addExamples($,P);return F}list(){let R=this._expectProjectId();if(!R)return Promise.resolve(null);return this._client.getV1projectsDatasets(R)}_expectProjectId(){if(!this._projectId)return console.error("Project ID is not resolved. Dataset operations require a valid project."),null;return this._projectId}}class c1{_client;_projectName;_projectId;constructor(R,q,E){this._client=R,this._projectName=q,this._projectId=E}static async create(R){let q=R.apiKey??c,E=R.organizationId??t,$=R.apiUrl??r;if(!q)throw Error("API key is required");if(!E)throw Error("Organization ID is required");if(!$)throw Error("API URL is required");if(!R.projectName)throw Error("Project name is required");let m=new d($,q,E),P=null;try{P=await e(m,R.projectName)}catch{console.warn(`Project '${R.projectName}' not found. Some operations requiring project_id will be skipped.`)}return new c1(m,R.projectName,P)}async offlineTracer(R){let{OfflineTracer:q}=await Promise.resolve().then(() => (wR(),bq));return q.create({...R,projectName:this._projectName,apiKey:this._client.getApiKey(),organizationId:this._client.getOrganizationId(),apiUrl:this._client.getBaseUrl()})}get datasets(){return new I1(this._client,this._projectId,this._projectName)}get evaluation(){return new N1(this._client,this._projectId,this._projectName)}}A();X1();s1();B();j1();HR();XR();YR();o1();Z1();QR();SR();wR();DR();C1();
|
|
1
|
+
var cf=Object.create;var{getPrototypeOf:rf,defineProperty:ZR,getOwnPropertyNames:K1,getOwnPropertyDescriptor:ef}=Object,u1=Object.prototype.hasOwnProperty;var hR=(R,f,q)=>{q=R!=null?cf(rf(R)):{};let $=f||!R||!R.__esModule?ZR(q,"default",{value:R,enumerable:!0}):q;for(let D of K1(R))if(!u1.call($,D))ZR($,D,{get:()=>R[D],enumerable:!0});return $},I1=new WeakMap,af=(R)=>{var f=I1.get(R),q;if(f)return f;if(f=ZR({},"__esModule",{value:!0}),R&&typeof R==="object"||typeof R==="function")K1(R).map(($)=>!u1.call(f,$)&&ZR(f,$,{get:()=>R[$],enumerable:!(q=ef(R,$))||q.enumerable}));return I1.set(R,f),f},Rq=(R,f)=>()=>(f||R((f={exports:{}}).exports,f),f.exports);var LR=(R,f)=>{for(var q in f)ZR(R,q,{get:f[q],enumerable:!0,configurable:!0,set:($)=>f[q]=()=>$})};var H=(R,f)=>()=>(R&&(f=R(R=0)),f);function NR(R,f){let q=process.env[R];if(!q)return f??null;return q}var qR,$R,DR,l1;var XR=H(()=>{qR=NR("JUDGMENT_API_KEY"),$R=NR("JUDGMENT_ORG_ID"),DR=NR("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),l1=NR("JUDGMENT_LOG_LEVEL","warn")});class c{baseUrl;apiKey;organizationId;constructor(R,f,q){this.baseUrl=R,this.apiKey=f,this.organizationId=q}getBaseUrl(){return this.baseUrl}getApiKey(){return this.apiKey}getOrganizationId(){return this.organizationId}async request(R,f,q){let $=await fetch(f,{method:R,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId},body:q!==void 0?JSON.stringify(q):void 0});if(!$.ok){let D=await $.text();throw Error(`HTTP ${$.status}: ${D}`)}return $.json()}async postOtelV1traces(){let R=this.baseUrl+"/otel/v1/traces";return this.request("POST",R,{})}async postOtelV1offlineTraces(){let R=this.baseUrl+"/otel/v1/offline-traces";return this.request("POST",R,{})}async postV1projectsResolve(R){let f=this.baseUrl+"/v1/projects/resolve/";return this.request("POST",f,R)}async postV1projects(R){let f=this.baseUrl+"/v1/projects";return this.request("POST",f,R)}async deleteV1projects(R){let f=this.baseUrl+`/v1/projects/${R}`;return this.request("DELETE",f,{})}async postV1projectsDatasets(R,f){let q=this.baseUrl+`/v1/projects/${R}/datasets`;return this.request("POST",q,f)}async getV1projectsDatasets(R){let f=this.baseUrl+`/v1/projects/${R}/datasets`;return this.request("GET",f,void 0)}async getV1projectsDatasetsByDatasetIdentifierVersions(R,f){let q=this.baseUrl+`/v1/projects/${R}/datasets/${f}/versions`;return this.request("GET",q,void 0)}async getV1projectsDatasetsByDatasetIdentifierPage(R,f,q,$,D,P){let U=new URLSearchParams;if(q!==void 0)U.set("version",q);if($!==void 0)U.set("limit",$);if(D!==void 0)U.set("cursor_created_at",D);if(P!==void 0)U.set("cursor_example_id",P);let E=this.baseUrl+`/v1/projects/${R}/datasets/${f}/page`+(U.toString()?"?"+U.toString():"");return this.request("GET",E,void 0)}async postV1projectsDatasetsByDatasetIdentifierExamples(R,f,q){let $=this.baseUrl+`/v1/projects/${R}/datasets/${f}/examples`;return this.request("POST",$,q)}async deleteV1projectsDatasetsByDatasetIdentifier(R,f){let q=this.baseUrl+`/v1/projects/${R}/datasets/${f}`;return this.request("DELETE",q,{})}async getV1projectsDatasetsByDatasetIdentifier(R,f){let q=this.baseUrl+`/v1/projects/${R}/datasets/${f}`;return this.request("GET",q,void 0)}async getV1projectsTestConfigs(R,f){let q=new URLSearchParams;if(f!==void 0)q.set("dataset_id",f);let $=this.baseUrl+`/v1/projects/${R}/test-configs`+(q.toString()?"?"+q.toString():"");return this.request("GET",$,void 0)}async postV1projectsTestConfigs(R,f){let q=this.baseUrl+`/v1/projects/${R}/test-configs`;return this.request("POST",q,f)}async getV1projectsTestConfigsByTestConfigId(R,f){let q=this.baseUrl+`/v1/projects/${R}/test-configs/${f}`;return this.request("GET",q,void 0)}async patchV1projectsTestConfigsByTestConfigId(R,f,q){let $=this.baseUrl+`/v1/projects/${R}/test-configs/${f}`;return this.request("PATCH",$,q)}async deleteV1projectsTestConfigsByTestConfigId(R,f){let q=this.baseUrl+`/v1/projects/${R}/test-configs/${f}`;return this.request("DELETE",q,{})}async getV1projectsTestRuns(R,f,q,$,D){let P=new URLSearchParams;if(f!==void 0)P.set("test_config_id",f);if(q!==void 0)P.set("dataset_id",q);if($!==void 0)P.set("status",$);if(D!==void 0)P.set("limit",D);let U=this.baseUrl+`/v1/projects/${R}/test-runs`+(P.toString()?"?"+P.toString():"");return this.request("GET",U,void 0)}async postV1projectsTestRuns(R,f){let q=this.baseUrl+`/v1/projects/${R}/test-runs`;return this.request("POST",q,f)}async getV1projectsTestRunsByTestRunId(R,f){let q=this.baseUrl+`/v1/projects/${R}/test-runs/${f}`;return this.request("GET",q,void 0)}async patchV1projectsTestRunsByTestRunIdStatus(R,f,q){let $=this.baseUrl+`/v1/projects/${R}/test-runs/${f}/status`;return this.request("PATCH",$,q)}async patchV1projectsTestRunsByTestRunIdSuccess(R,f,q){let $=this.baseUrl+`/v1/projects/${R}/test-runs/${f}/success`;return this.request("PATCH",$,q)}async getV1projectsTestRunsByTestRunIdItems(R,f,q,$){let D=new URLSearchParams;if(q!==void 0)D.set("limit",q);if($!==void 0)D.set("cursor",$);let P=this.baseUrl+`/v1/projects/${R}/test-runs/${f}/items`+(D.toString()?"?"+D.toString():"");return this.request("GET",P,void 0)}async getV1projectsTestRunsByTestRunIdResults(R,f,q,$){let D=new URLSearchParams;if(q!==void 0)D.set("limit",q);if($!==void 0)D.set("cursor",$);let P=this.baseUrl+`/v1/projects/${R}/test-runs/${f}/results`+(D.toString()?"?"+D.toString():"");return this.request("GET",P,void 0)}async getV1projectsTestRunsByTestRunIdGraph(R,f){let q=this.baseUrl+`/v1/projects/${R}/test-runs/${f}/graph`;return this.request("GET",q,void 0)}async getV1projectsExperimentsByRunId(R,f,q,$){let D=new URLSearchParams;if(q!==void 0)D.set("limit",q);if($!==void 0)D.set("cursor",$);let P=this.baseUrl+`/v1/projects/${R}/experiments/${f}`+(D.toString()?"?"+D.toString():"");return this.request("GET",P,void 0)}async postV1projectsEvalResults(R,f){let q=this.baseUrl+`/v1/projects/${R}/eval-results`;return this.request("POST",q,f)}async postV1projectsEvalResultsExamples(R,f){let q=this.baseUrl+`/v1/projects/${R}/eval-results/examples`;return this.request("POST",q,f)}async postV1projectsEvaluateExamples(R,f){let q=this.baseUrl+`/v1/projects/${R}/evaluate/examples`;return this.request("POST",q,f)}async postV1projectsEvaluateTraces(R,f){let q=this.baseUrl+`/v1/projects/${R}/evaluate/traces`;return this.request("POST",q,f)}async postV1projectsEvalQueueExamples(R,f){let q=this.baseUrl+`/v1/projects/${R}/eval-queue/examples`;return this.request("POST",q,f)}async postV1projectsEvalQueueTraces(R,f){let q=this.baseUrl+`/v1/projects/${R}/eval-queue/traces`;return this.request("POST",q,f)}async getV1projectsPromptsByName(R,f,q,$){let D=new URLSearchParams;if(q!==void 0)D.set("commit_id",q);if($!==void 0)D.set("tag",$);let P=this.baseUrl+`/v1/projects/${R}/prompts/${f}`+(D.toString()?"?"+D.toString():"");return this.request("GET",P,void 0)}async postV1projectsPrompts(R,f){let q=this.baseUrl+`/v1/projects/${R}/prompts`;return this.request("POST",q,f)}async postV1projectsPromptsByNameTags(R,f,q){let $=this.baseUrl+`/v1/projects/${R}/prompts/${f}/tags`;return this.request("POST",$,q)}async deleteV1projectsPromptsByNameTags(R,f,q){let $=this.baseUrl+`/v1/projects/${R}/prompts/${f}/tags`;return this.request("DELETE",$,q)}async getV1projectsPromptsByNameVersions(R,f){let q=this.baseUrl+`/v1/projects/${R}/prompts/${f}/versions`;return this.request("GET",q,void 0)}async getV1projectsScorers(R,f,q){let $=new URLSearchParams;if(f!==void 0)$.set("names",f);if(q!==void 0)$.set("is_trace",q);let D=this.baseUrl+`/v1/projects/${R}/scorers`+($.toString()?"?"+$.toString():"");return this.request("GET",D,void 0)}async getV1projectsScorersByNameExists(R,f){let q=this.baseUrl+`/v1/projects/${R}/scorers/${f}/exists`;return this.request("GET",q,void 0)}async postV1projectsScorersCustom(R){let f=this.baseUrl+`/v1/projects/${R}/scorers/custom`;return this.request("POST",f,{})}async postV1projectsScorersCustomBundle(R){let f=this.baseUrl+`/v1/projects/${R}/scorers/custom/bundle`;return this.request("POST",f,{})}async getV1projectsScorersCustomByNameExists(R,f){let q=this.baseUrl+`/v1/projects/${R}/scorers/custom/${f}/exists`;return this.request("GET",q,void 0)}async postV1projectsTracesByTraceIdTags(R,f,q){let $=this.baseUrl+`/v1/projects/${R}/traces/${f}/tags`;return this.request("POST",$,q)}async getV1e2eFetchTraceByProjectNameByTraceId(R,f){let q=this.baseUrl+`/v1/e2e_fetch_trace/${R}/${f}`;return this.request("GET",q,void 0)}async getV1e2eTracesPerProject(R){let f=this.baseUrl+`/v1/e2e_traces_per_project/${R}`;return this.request("GET",f,void 0)}async postV1e2eFetchSpanScore(R){let f=this.baseUrl+"/v1/e2e_fetch_span_score/";return this.request("POST",f,R)}async postV1projectsJudges(R,f){let q=this.baseUrl+`/v1/projects/${R}/judges`;return this.request("POST",q,f)}async patchV1projectsJudgesByJudgeId(R,f,q){let $=this.baseUrl+`/v1/projects/${R}/judges/${f}`;return this.request("PATCH",$,q)}}var AR=()=>{};var F;var j=H(()=>{XR();F=class F{static RESET="\x1B[0m";static RED="\x1B[31m";static YELLOW="\x1B[33m";static GRAY="\x1B[90m";static Level={DEBUG:0,INFO:1,WARNING:2,ERROR:3,CRITICAL:4};static initialized=!1;static levelSetManually=!1;static currentLevel=F.Level.WARNING;static useColor=!0;static initialize(){if(!F.initialized){let R=process.env.JUDGMENT_NO_COLOR;if(F.useColor=!R&&process.stdout.isTTY,!F.levelSetManually){let f=l1.toLowerCase();if(f){let q={debug:F.Level.DEBUG,info:F.Level.INFO,warning:F.Level.WARNING,warn:F.Level.WARNING,error:F.Level.ERROR,critical:F.Level.CRITICAL};F.currentLevel=q[f]??F.Level.WARNING}}F.initialized=!0}}static setLevel(R){F.currentLevel=R,F.levelSetManually=!0}static setUseColor(R){F.useColor=R}static log(R,f){if(F.initialize(),R<F.currentLevel)return;let q=new Date().toISOString().replace("T"," ").substring(0,19),$=Object.keys(F.Level).find((U)=>F.Level[U]===R)??"UNKNOWN",D=`${q} - judgeval - ${$} - ${f}`;if(F.useColor)D=`${R===F.Level.DEBUG||R===F.Level.INFO?F.GRAY:R===F.Level.WARNING?F.YELLOW:F.RED}${D}${F.RESET}`;(R>=F.Level.ERROR?process.stderr:process.stdout).write(D+`
|
|
2
|
+
`)}static debug(R){F.log(F.Level.DEBUG,R)}static info(R){F.log(F.Level.INFO,R)}static warning(R){F.log(F.Level.WARNING,R)}static warn(R){F.log(F.Level.WARNING,R)}static error(R){F.log(F.Level.ERROR,R)}static critical(R){F.log(F.Level.CRITICAL,R)}}});function BR(R){return new Promise((f)=>setTimeout(f,R))}async function p1(R,f={}){let{maxRetries:q=3,backoff:$=()=>1000,onRetry:D}=f;for(let P=1;P<=q;P++)try{return await R()}catch(U){if(P===q)throw U;D?.(P,U),await BR($(P))}throw Error("retry: exhausted all attempts")}var d1=()=>{};async function PR(R,f){let q=`org:${R.getOrganizationId()}:project:${f}`,$=s1.get(q);if($)return $;let D=H1.get(q);if(D)return D;let P=(async()=>{F.info(`Resolving project ID for project: ${f}`);let U=await p1(async()=>{let O=(await R.postV1projectsResolve({project_name:f})).project_id;if(!O)throw Error(`Project ID not found for project: ${f}`);return O},{maxRetries:3,backoff:(E)=>E*1000,onRetry:(E,O)=>{F.warning(`Failed to resolve project ID for '${f}' (attempt ${E}): ${String(O)}`)}});return F.info(`Resolved project ID: ${U}`),s1.set(q,U),U})();H1.set(q,P);try{return await P}finally{H1.delete(q)}}var s1,H1;var vR=H(()=>{j();d1();s1=new Map,H1=new Map});var GR=Rq((rq,S1)=>{var KR=process||{},n1=KR.argv||[],IR=KR.env||{},fq=!(!!IR.NO_COLOR||n1.includes("--no-color"))&&(!!IR.FORCE_COLOR||n1.includes("--color")||KR.platform==="win32"||(KR.stdout||{}).isTTY&&IR.TERM!=="dumb"||!!IR.CI),qq=(R,f,q=R)=>($)=>{let D=""+$,P=D.indexOf(f,R.length);return~P?R+$q(D,f,q,P)+f:R+D+f},$q=(R,f,q,$)=>{let D="",P=0;do D+=R.substring(P,$)+q,P=$+f.length,$=R.indexOf(f,P);while(~$);return D+R.substring(P)},g1=(R=fq)=>{let f=R?qq:()=>String;return{isColorSupported:R,reset:f("\x1B[0m","\x1B[0m"),bold:f("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:f("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:f("\x1B[3m","\x1B[23m"),underline:f("\x1B[4m","\x1B[24m"),inverse:f("\x1B[7m","\x1B[27m"),hidden:f("\x1B[8m","\x1B[28m"),strikethrough:f("\x1B[9m","\x1B[29m"),black:f("\x1B[30m","\x1B[39m"),red:f("\x1B[31m","\x1B[39m"),green:f("\x1B[32m","\x1B[39m"),yellow:f("\x1B[33m","\x1B[39m"),blue:f("\x1B[34m","\x1B[39m"),magenta:f("\x1B[35m","\x1B[39m"),cyan:f("\x1B[36m","\x1B[39m"),white:f("\x1B[37m","\x1B[39m"),gray:f("\x1B[90m","\x1B[39m"),bgBlack:f("\x1B[40m","\x1B[49m"),bgRed:f("\x1B[41m","\x1B[49m"),bgGreen:f("\x1B[42m","\x1B[49m"),bgYellow:f("\x1B[43m","\x1B[49m"),bgBlue:f("\x1B[44m","\x1B[49m"),bgMagenta:f("\x1B[45m","\x1B[49m"),bgCyan:f("\x1B[46m","\x1B[49m"),bgWhite:f("\x1B[47m","\x1B[49m"),blackBright:f("\x1B[90m","\x1B[39m"),redBright:f("\x1B[91m","\x1B[39m"),greenBright:f("\x1B[92m","\x1B[39m"),yellowBright:f("\x1B[93m","\x1B[39m"),blueBright:f("\x1B[94m","\x1B[39m"),magentaBright:f("\x1B[95m","\x1B[39m"),cyanBright:f("\x1B[96m","\x1B[39m"),whiteBright:f("\x1B[97m","\x1B[39m"),bgBlackBright:f("\x1B[100m","\x1B[49m"),bgRedBright:f("\x1B[101m","\x1B[49m"),bgGreenBright:f("\x1B[102m","\x1B[49m"),bgYellowBright:f("\x1B[103m","\x1B[49m"),bgBlueBright:f("\x1B[104m","\x1B[49m"),bgMagentaBright:f("\x1B[105m","\x1B[49m"),bgCyanBright:f("\x1B[106m","\x1B[49m"),bgWhiteBright:f("\x1B[107m","\x1B[49m")}};S1.exports=g1();S1.exports.createColors=g1});var m;var JR=H(()=>{m=class m{exampleId;createdAt;name;_properties;constructor(R,f,q,$){this.exampleId=R,this.createdAt=f,this.name=q,this._properties=$}static create(R={}){return new m(crypto.randomUUID(),new Date().toISOString(),null,{...R})}static META_KEYS=new Set(["example_id","created_at","name","trace_id","span_id","offline_trace_id","agent_offline_trace_id"]);static from(R){let f={};for(let q of Object.keys(R))if(!m.META_KEYS.has(q))f[q]=R[q];return new m(R.example_id??"",R.created_at??"",R.name??null,f)}get(R){return this._properties[R]}has(R){return R in this._properties}get properties(){return{...this._properties}}toJSON(){let R={example_id:this.exampleId,created_at:this.createdAt,name:this.name};for(let[f,q]of Object.entries(this._properties))R[f]=q;return R}}});function Eq(){let R=new WeakSet;return function(f,q){if(typeof q==="bigint")return q.toString();if(typeof q==="object"&&q!==null){if(R.has(q))return"[Circular]";R.add(q)}return q}}function w(R){try{let f=JSON.stringify(R);if(typeof f==="string")return f;return String(f)}catch{try{let f=JSON.stringify(R,Eq());return typeof f==="string"?f:String(R)}catch(f){return F.error(`safeStringify failed: ${f}`),String(R)}}}function e(R,f){if(typeof R==="string"||typeof R==="number"||typeof R==="boolean")return R;return f(R)}var I=H(()=>{j()});var t1="1.1.0";var o1=()=>{};var gR;var Z1=H(()=>{o1();gR=t1});var FR=()=>{};function S(R,f,q){try{return f()}catch($){let D=$ instanceof Error&&$.stack?`
|
|
3
|
+
${$.stack}`:"";return F.error(`[Caught] An exception was raised in ${R}: ${String($)}${D}`),q}}var y=H(()=>{j()});var c1=H(()=>{y()});function K(R,f={}){let{pre:q,post:$,error:D,finally:P}=f;return async function(...E){let O=q?S("immutableWrapAsync.pre",()=>q(...E)):void 0,Q;try{let Y=await R.apply(this,E);if($)Q=S("immutableWrapAsync.post",()=>$(O,Y,E));return Y}catch(Y){if(D)Q=S("immutableWrapAsync.error",()=>D(O,Y,E));throw Y}finally{if(P)S("immutableWrapAsync.finally",()=>{P(Q)})}}}var r1=H(()=>{y()});var e1=H(()=>{y()});function h1(R,f={}){let{pre:q,yield:$,post:D,error:P,finally:U}=f;return async function*(...O){let Q=q?S("immutableWrapAsyncIterator.pre",()=>q(...O)):void 0,Y;try{for await(let W of R(...O)){if($)S("immutableWrapAsyncIterator.yield",()=>{$(Q,W)});yield W}if(D)Y=S("immutableWrapAsyncIterator.post",()=>D(Q))}catch(W){if(P)Y=S("immutableWrapAsyncIterator.error",()=>P(Q,W));throw W}finally{if(U)S("immutableWrapAsyncIterator.finally",()=>{U(Y)})}}}var X1=H(()=>{y()});function a(R,f){let q=R[Symbol.asyncIterator].bind(R),$=h1(()=>({[Symbol.asyncIterator]:q}),{yield:(D,P)=>{f.onYield(P)},post:()=>{f.onDone()},error:(D,P)=>{f.onError(P)},finally:()=>{f.onFinally()}});R[Symbol.asyncIterator]=()=>$()}var a1=H(()=>{X1()});var bR=H(()=>{c1();r1();e1();X1();a1()});function wR(R,f){S("recordChatUsage",()=>{let q=f.prompt_tokens_details?.cached_tokens??0,$=f.prompt_tokens+f.completion_tokens+q;V.recordLLMMetadata({non_cached_input_tokens:$>f.total_tokens?f.prompt_tokens-q:f.prompt_tokens,output_tokens:f.completion_tokens||void 0,cache_read_input_tokens:q||void 0},R),V.setAttribute("judgment.usage.metadata",w(f),R)})}var G1=H(()=>{FR();p();y();I()});function Rf(R){R.chat.completions.parse=K(R.chat.completions.parse.bind(R.chat.completions),{pre:(f)=>{let q=V.startSpan("OPENAI_API_CALL");return V.setSpanKind("llm",q),V.recordLLMMetadata({model:f.model},q),V.setInput(f,q),q},post:(f,q)=>{if(!f)return;if(V.setOutput(w(q),f),q.usage)wR(f,q.usage);return V.recordLLMMetadata({model:q.model},f),f},error:(f,q)=>{if(f)V.setError(q,f);return f},finally:(f)=>{f?.end()}})}var ff=H(()=>{p();I();bR();G1()});function qf(R){R.chat.completions.create=K(R.chat.completions.create.bind(R.chat.completions),{pre:(f)=>{if(f.stream)f.stream_options??={include_usage:!0};let q=V.startSpan("OPENAI_API_CALL");return V.setSpanKind("llm",q),V.recordLLMMetadata({model:f.model},q),V.setInput(f,q),{span:q,proxied:!1}},post:(f,q,$)=>{if(!f)return;let{span:D}=f;if($[0].stream){let U=q,E="";return a(U,{onYield(O){if(typeof O.choices[0]?.delta.content==="string")E+=O.choices[0].delta.content;if(O.usage)wR(D,O.usage)},onDone(){V.setOutput(E,D)},onError(O){V.setError(O,D)},onFinally(){D.end()}}),{span:D,proxied:!0}}let P=q;if(V.setOutput(w(P),D),P.usage)wR(D,P.usage);return V.recordLLMMetadata({model:P.model},D),f},error:(f,q)=>{if(f)V.setError(q,f.span);return f},finally:(f)=>{if(f&&!f.proxied)f.span.end()}})}var $f=H(()=>{p();I();bR();G1()});function Df(R,f){S("images.recordUsage",()=>{let q="input_tokens_details"in f?f.input_tokens_details:void 0,$=q?.image_tokens??0;if(V.recordLLMMetadata({non_cached_input_tokens:q?.text_tokens??0,output_tokens:f.output_tokens||void 0},R),$)V.setAttribute("judgment.usage.non_cached_input_image_tokens",$,R);if(f.output_tokens)V.setAttribute("judgment.usage.output_image_tokens",f.output_tokens,R);V.setAttribute("judgment.usage.metadata",w(f),R)})}function Pf(R){R.images.generate=K(R.images.generate.bind(R.images),{pre:(f)=>{let q=V.startSpan("OPENAI_API_CALL");return V.setSpanKind("llm",q),V.recordLLMMetadata({model:f.model},q),V.setInput(f,q),{span:q,proxied:!1}},post:(f,q,$)=>{if(!f)return;let{span:D}=f;if($[0].stream){let U=q,E;return a(U,{onYield(O){if(Fq.has(O.type))E=O,Df(D,E.usage)},onDone(){V.setOutput(w(E??{}),D)},onError(O){V.setError(O,D)},onFinally(){D.end()}}),{span:D,proxied:!0}}let P=q;if(V.setOutput(w(P),D),P.usage)Df(D,P.usage);return f},error:(f,q)=>{if(f)V.setError(q,f.span);return f},finally:(f)=>{if(f&&!f.proxied)f.span.end()}})}var Fq;var Uf=H(()=>{FR();p();y();I();bR();Fq=new Set(["image_generation.completed","image_edit.completed"])});function Of(R,f){S("responses.recordUsage",()=>{let q=f.input_tokens_details.cached_tokens,$=f.input_tokens+f.output_tokens+q;V.recordLLMMetadata({non_cached_input_tokens:$>f.total_tokens?f.input_tokens-q:f.input_tokens,output_tokens:f.output_tokens||void 0,cache_read_input_tokens:q||void 0},R),V.setAttribute("judgment.usage.metadata",w(f),R)})}function Ef(R){R.responses.create=K(R.responses.create.bind(R.responses),{pre:(f)=>{let q=V.startSpan("OPENAI_API_CALL");return V.setSpanKind("llm",q),V.recordLLMMetadata({model:f.model},q),V.setInput(f,q),{span:q,proxied:!1}},post:(f,q,$)=>{if(!f)return;let{span:D}=f;if($[0].stream){let U=q,E="";return a(U,{onYield(O){if(O.type==="response.output_text.delta")E+=O.delta;if(O.type==="response.completed"){let Q=O.response;if(Q.usage)Of(D,Q.usage);V.recordLLMMetadata({model:Q.model},D)}},onDone(){V.setOutput(E,D)},onError(O){V.setError(O,D)},onFinally(){D.end()}}),{span:D,proxied:!0}}let P=q;if(V.setOutput(w(P),D),P.usage)Of(D,P.usage);if(typeof P.model==="string")V.recordLLMMetadata({model:P.model},D);return f},error:(f,q)=>{if(f)V.setError(q,f.span);return f},finally:(f)=>{if(f&&!f.proxied)f.span.end()}})}var Vf=H(()=>{FR();p();y();I();bR()});function oR(R){return S("wrapOpenAI",()=>{qf(R),Rf(R),Ef(R),Pf(R)}),R}var Ff=H(()=>{y();ff();$f();Uf();Vf()});function tR(R){return oR(R)}var J1=H(()=>{Ff()});function Cq(R){return Function.prototype.toString.call(R)}function Zq(R){let f=Cq(R).replace(Sq,"");return f.match(Qq)||f.match(Yq)}function Qf(R){let f=Zq(R);if(!f||!f[1])return[];return f[1].split(Wq).map((q)=>{return q.replace(Hq,(D,P,U)=>U).trim()}).filter((q)=>q.length>0)}var Qq,Yq,Wq,Hq,Sq;var Yf=H(()=>{Qq=/^([^(]+?)=>/,Yq=/^[^(]*\(\s*([^)]*)\)/m,Wq=/,/,Hq=/^\s*(_?)(\S+?)\1\s*$/,Sq=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm});function w1(){return Hf.getStore()===!0}function Sf(R){if(b1=R,Wf)return;let f=N.context;f.active=()=>{if(!w1())return hq();let q=cR.getStore();if(q)return q;return b1?b1():N.ROOT_CONTEXT},f.with=(q,$,D,...P)=>{if(!w1())return Xq(q,$,D,...P);return cR.run(q,()=>$.apply(D,P))},f.bind=(q,$)=>{if(!w1())return Gq(q,$);if(typeof $!=="function")return $;let D=$;return(...P)=>cR.run(q,()=>D(...P))},Wf=!0}function M1(R,f){return Hf.run(!0,()=>cR.run(R,f))}var N,_1,Wf=!1,b1=null,Hf,cR,hq,Xq,Gq;var Cf=H(()=>{N=require("@opentelemetry/api"),_1=require("async_hooks"),Hf=new _1.AsyncLocalStorage,cR=new _1.AsyncLocalStorage,hq=N.context.active.bind(N.context),Xq=N.context.with.bind(N.context),Gq=N.context.bind.bind(N.context)});class Xf{_provider;constructor(R){this._provider=R}startSpan(R,f,q){let $=q??this._provider.getCurrentContext();return this._provider._getDelegateTracer().startSpan(R,f,$)}startActiveSpan(R,...f){let q={},$=this._provider.getCurrentContext(),D;if(f.length===1)D=f[0];else if(f.length===2)q=f[0],D=f[1];else q=f[0],$=f[1],D=f[2];let P=this.startSpan(R,q,$);return this._provider.useSpan(P,!1,!1,!1,()=>D(P))}}class Gf{startSpan(){return x.trace.wrapSpanContext(x.INVALID_SPAN_CONTEXT)}startActiveSpan(R,...f){return(f.length===1?f[0]:f.length===2?f[1]:f[2])(this.startSpan())}}class G{static _instance=null;_activeTracer=null;_instrumentations=[];_noOpTracer;_proxyTracer;_tracers=new Set;constructor(){this._noOpTracer=new Gf,this._proxyTracer=new Xf(this),Sf(()=>this.getCurrentContext())}static getInstance(){return G._instance??=new G,G._instance}static installAsGlobalTracerProvider(){let R=G.getInstance();return x.trace.setGlobalTracerProvider(R)}register(R){this._tracers.add(R)}deregister(R){this._tracers.delete(R)}setActive(R){let f=this.getCurrentSpan();if(f?.isRecording()){if(x.trace.getSpan(this.getCurrentContext())===f)return F.error("Cannot set_active() while a root span is active. Keeping existing tracer provider."),!1}return this.register(R),this._activeTracer=R,!0}getActiveTracer(){return this._activeTracer}getCurrentContext(){return rR.getStore()??x.ROOT_CONTEXT}setSpan(R,f){return x.trace.setSpan(R,f)}wrapSpanContext(R){return x.trace.wrapSpanContext(R)}getCurrentSpan(){let R=this.getCurrentContext();return x.trace.getSpan(R)}hasActiveRootSpan(){if(!this.getCurrentSpan()?.isRecording())return!1;return!0}_getDelegateTracer(){let R=this._activeTracer;if(!R)return F.debug("No active tracer, returning NoOpTracer"),this._noOpTracer;return R._tracerProvider.getTracer(Jq)}getTracer(R,f,q){return this._proxyTracer}addInstrumentation(R){try{Zf.registerInstrumentations({tracerProvider:this,instrumentations:[R]}),this._instrumentations.push(R)}catch(f){F.error(`Failed to add instrumentation: ${String(f)}`)}}useSpan(R,f,q,$,D){let P=this.getCurrentContext(),U=x.trace.setSpan(P,R);return rR.run(U,()=>M1(U,()=>{try{let E=D();if(E instanceof Promise)return E.catch((O)=>{if(R.isRecording()){if(q)R.recordException(O);if($){let Q=O;R.setStatus({code:x.SpanStatusCode.ERROR,message:`${Q.name}: ${Q.message}`})}}throw O}).finally(()=>{if(f)R.end()});if(f)R.end();return E}catch(E){if(R.isRecording()){if(q)R.recordException(E);if($){let O=E;R.setStatus({code:x.SpanStatusCode.ERROR,message:`${O.name}: ${O.message}`})}}if(f)R.end();throw E}}))}attachContext(R){rR.enterWith(R)}withContext(R,f){return rR.run(R,()=>M1(R,f))}async forceFlush(){let R=await Promise.allSettled(Array.from(this._tracers).map((f)=>f._tracerProvider.forceFlush()));for(let f of R)if(f.status==="rejected")F.error(`forceFlush failed: ${String(f.reason)}`)}async shutdown(){let R=await Promise.allSettled(Array.from(this._tracers).map((f)=>f._tracerProvider.shutdown()));for(let f of R)if(f.status==="rejected")F.error(`shutdown failed: ${String(f.reason)}`);this._activeTracer=null,this._tracers.clear()}}var x,Zf,hf,Jq="judgeval",rR;var u=H(()=>{j();Cf();x=require("@opentelemetry/api"),Zf=require("@opentelemetry/instrumentation"),hf=require("async_hooks"),rR=new hf.AsyncLocalStorage});var Jf="=",eR=";",_R=",",aR="baggage",bf=180,wf=4096,_f=8192;function Tf(R){return R.reduce((f,q)=>{let $=`${f}${f!==""?_R:""}${q}`;return $.length>_f?f:$},"")}function zf(R){return R.getAllEntries().map(([f,q])=>{let $=`${encodeURIComponent(f)}=${encodeURIComponent(q.value)}`;if(q.metadata!==void 0)$+=eR+q.metadata.toString();return $})}function jf(R){let f=R.split(eR);if(f.length<=0)return;let q=f.shift();if(!q)return;let $=q.indexOf(Jf);if($<=0)return;let D=decodeURIComponent(q.substring(0,$).trim()),P=decodeURIComponent(q.substring($+1).trim()),U;if(f.length>0)U=Mf.baggageEntryMetadataFromString(f.join(eR));return{key:D,value:P,metadata:U}}var Mf;var xf=H(()=>{Mf=require("@opentelemetry/api")});class d{inject(R,f,q){let $=s(R);if(!$||mf.isTracingSuppressed(R))return;let D=zf($).filter((U)=>U.length<=wf).slice(0,bf),P=Tf(D);if(P.length>0)q.set(f,aR,P)}extract(R,f,q){let $=q.get(f,aR),D=Array.isArray($)?$.join(_R):$;if(!D)return R;let P={};if(D.length===0)return R;if(D.split(_R).forEach((E)=>{let O=jf(E);if(O){let Q={value:O.value};if(O.metadata)Q.metadata=O.metadata;P[O.key]=Q}}),Object.entries(P).length===0)return R;return TR(R,MR(P))}fields(){return[aR]}}var mf;var R1=H(()=>{zR();xf();mf=require("@opentelemetry/core")});var f1={};LR(f1,{setBaggage:()=>TR,getBaggage:()=>s,getActiveBaggage:()=>bq,deleteBaggage:()=>wq,createBaggage:()=>MR,baggageEntryMetadataFromString:()=>kf.baggageEntryMetadataFromString,JudgmentBaggagePropagator:()=>d});function s(R){return R.getValue(T1)}function bq(){return s(G.getInstance().getCurrentContext())}function TR(R,f){return R.setValue(T1,f)}function wq(R){return R.deleteValue(T1)}var jR,kf,MR,T1;var zR=H(()=>{u();R1();jR=require("@opentelemetry/api"),kf=require("@opentelemetry/api"),MR=jR.propagation.createBaggage.bind(jR.propagation),T1=jR.createContextKey("baggage")});var D1={};LR(D1,{setGlobalTextmap:()=>_q,inject:()=>Mq,getGlobalTextmap:()=>z1,extract:()=>j1});function z1(){return yf}function _q(R){yf=R}function Lf(R){if(R!==void 0)return R;return G.getInstance().getCurrentContext()}function Mq(R,f,q=q1.defaultTextMapSetter){S("propagation.inject",()=>{z1().inject(Lf(f),R,q)})}function j1(R,f,q=q1.defaultTextMapGetter){let $=Lf(f);return S("propagation.extract",()=>z1().extract($,R,q),$)}var q1,$1,yf;var x1=H(()=>{y();R1();u();q1=require("@opentelemetry/api"),$1=require("@opentelemetry/core"),yf=new $1.CompositePropagator({propagators:[new $1.W3CTraceContextPropagator,new d]})});class V{projectName;projectId;apiKey;organizationId;apiUrl;environment;serializer;_tracerProvider;_client;_enableMonitoring;supportsLiveInstrumentation=!0;constructor(R,f,q,$,D,P,U,E,O,Q){this.projectName=R,this.projectId=f,this.apiKey=q,this.organizationId=$,this.apiUrl=D,this.environment=P,this.serializer=U,this._tracerProvider=E,this._client=O,this._enableMonitoring=Q}setActive(){return G.getInstance().setActive(this)}static _getProxyProvider(){return G.getInstance()}static _getSerializer(){return V._getProxyProvider().getActiveTracer()?.serializer??w}static _getCurrentTraceAndSpanId(){let f=V._getProxyProvider().getCurrentSpan();if(!f?.isRecording())return null;let q=f.spanContext();if(!q.traceId||!(q.traceFlags&1))return null;return[q.traceId,q.spanId]}static _emitPartial(){S("BaseTracer._emitPartial",()=>{let R=V._getProxyProvider().getActiveTracer();if(!R||!R.supportsLiveInstrumentation)return;R.getSpanProcessor().emitPartial()})}static getCurrentSpan(){return V._getProxyProvider().getCurrentSpan()}static async forceFlush(){await V._getProxyProvider().forceFlush()}static async shutdown(){await V._getProxyProvider().shutdown()}static registerOTELInstrumentation(R){S("BaseTracer.registerOTELInstrumentation",()=>{V._getProxyProvider().addInstrumentation(R)})}static wrap(R){return tR(R)}static getOTELTracer(){return V._getProxyProvider().getTracer(Nf)}static startSpan(R,f){let q=V.getOTELTracer().startSpan(R,{attributes:f});return V._emitPartial(),q}static startActiveSpan(R,f){let{name:q,attributes:$}=R;return V.getOTELTracer().startActiveSpan(q,{attributes:$},(D)=>{V._emitPartial();try{let P=f(D);if(P instanceof Promise)return P.finally(()=>{D.end()});return D.end(),P}catch(P){throw D.end(),P}})}static span(R,f){return V.startActiveSpan({name:R},(q)=>{try{let $=f(q);if($ instanceof Promise)return $.catch((D)=>{throw q.setStatus({code:l.SpanStatusCode.ERROR,message:String(D)}),q.recordException(D),D});return $}catch($){throw q.setStatus({code:l.SpanStatusCode.ERROR,message:String($)}),q.recordException($),$}})}static with(R,f){return V.span(R,f)}static continueTrace(R,f){let q=V._getProxyProvider(),$=j1(R);return q.withContext($,()=>f($))}static observe(R,f){let q;if(typeof R==="function")q=R;else f=R;let{spanType:$="span",spanName:D,recordInput:P=!0,recordOutput:U=!0,fork:E=!1}=f??{},O=V._getProxyProvider(),Q=(Y)=>{let W=D??Y.name;return function(...C){let J=O.getTracer(Nf);if(E&&O.getActiveTracer()!==null&&O.getCurrentSpan()?.isRecording()===!0){let h=V._getSerializer(),Z=J.startSpan(W),T=Z.spanContext();if($)Z.setAttribute("judgment.span_kind",$);let kR={"judgment.link.source_trace_id":T.traceId,"judgment.link.source_span_id":T.spanId};if($)kR["judgment.span_kind"]=$;let yR=O.setSpan(O.getCurrentContext(),O.wrapSpanContext(l.INVALID_SPAN_CONTEXT)),v=J.startSpan(W,{attributes:kR},yR),o=v.spanContext();Z.setAttribute("judgment.link.target_trace_id",o.traceId),Z.setAttribute("judgment.link.target_span_id",o.spanId);let fR=()=>{v.end(),Z.end()},B1=(z)=>{for(let L of[v,Z])L.recordException(z),L.setStatus({code:l.SpanStatusCode.ERROR,message:String(z)})},v1=(z)=>{let L=e(z,h);v.setAttribute("judgment.output",L),Z.setAttribute("judgment.output",L)};if(P){let z=e(Af(Y,C),h);v.setAttribute("judgment.input",z),Z.setAttribute("judgment.input",z)}return V._emitPartial(),O.useSpan(v,!1,!1,!1,()=>{try{let z=Y.call(this,...C);if(z instanceof Promise)return z.then((L)=>{if(U)v1(L);return L}).catch((L)=>{throw B1(L),L}).finally(fR);if(U)v1(z);return fR(),z}catch(z){throw B1(z),fR(),z}})}return J.startActiveSpan(W,(h)=>{if($)h.setAttribute("judgment.span_kind",$);try{if(P)h.setAttribute("judgment.input",e(Af(Y,C),V._getSerializer()));V._emitPartial();let Z=Y.call(this,...C);if(Z instanceof Promise)return Z.then((T)=>{if(U)h.setAttribute("judgment.output",e(T,V._getSerializer()));return T}).catch((T)=>{throw h.recordException(T),h.setStatus({code:l.SpanStatusCode.ERROR,message:String(T)}),T}).finally(()=>{h.end()});if(U)h.setAttribute("judgment.output",e(Z,V._getSerializer()));return h.end(),Z}catch(Z){throw h.recordException(Z),h.setStatus({code:l.SpanStatusCode.ERROR,message:String(Z)}),h.end(),Z}})}};if(!q)return Q;return Q(q)}static _resolveSpan(R){if(R)return R;return V._getProxyProvider().getCurrentSpan()}static setSpanKind(R,f){S("BaseTracer.setSpanKind",()=>{if(!R)return;let q=V._resolveSpan(f);if(q?.isRecording())q.setAttribute("judgment.span_kind",R)})}static setLLMSpan(){V.setSpanKind("llm")}static setToolSpan(){V.setSpanKind("tool")}static setGeneralSpan(){V.setSpanKind("span")}static setAttribute(R,f,q){S("BaseTracer.setAttribute",()=>{let $=V._resolveSpan(q);if(!$?.isRecording())return;if(!R||f==null)return;$.setAttribute(R,e(f,V._getSerializer()))})}static setAttributes(R,f){for(let[q,$]of Object.entries(R))if(f)V.setAttribute(q,$,f);else V.setAttribute(q,$)}static setInput(R,f){if(f)V.setAttribute("judgment.input",R,f);else V.setAttribute("judgment.input",R)}static setOutput(R,f){if(f)V.setAttribute("judgment.output",R,f);else V.setAttribute("judgment.output",R)}static setError(R,f){S("BaseTracer.setError",()=>{let q=V._resolveSpan(f);if(!q?.isRecording())return;q.recordException(R),q.setStatus({code:l.SpanStatusCode.ERROR,message:String(R)})})}static recordLLMMetadata(R,f){S("BaseTracer.recordLLMMetadata",()=>{let q=V._resolveSpan(f);if(!q?.isRecording())return;if(typeof R.model==="string")q.setAttribute("judgment.llm.model",R.model);if(typeof R.provider==="string")q.setAttribute("judgment.llm.provider",R.provider);if(typeof R.non_cached_input_tokens==="number")q.setAttribute("judgment.usage.non_cached_input_tokens",R.non_cached_input_tokens);if(typeof R.output_tokens==="number")q.setAttribute("judgment.usage.output_tokens",R.output_tokens);if(typeof R.cache_read_input_tokens==="number")q.setAttribute("judgment.usage.cache_read_input_tokens",R.cache_read_input_tokens);if(typeof R.cache_creation_input_tokens==="number")q.setAttribute("judgment.usage.cache_creation_input_tokens",R.cache_creation_input_tokens);if(typeof R.total_cost_usd==="number")q.setAttribute("judgment.usage.total_cost_usd",R.total_cost_usd)})}static _setPropagatingBaggageKey(R,f){S("BaseTracer._setPropagatingBaggageKey",()=>{let q=V._getProxyProvider(),$=q.getCurrentSpan();if(!$?.isRecording())return;$.setAttribute(R,f);let D=q.getCurrentContext(),P=(s(D)??MR()).setEntry(R,{value:f});q.attachContext(TR(D,P))})}static setCustomerId(R){V._setPropagatingBaggageKey("judgment.customer_id",R)}static setCustomerUserId(R){V._setPropagatingBaggageKey("judgment.customer_user_id",R)}static setSessionId(R){V._setPropagatingBaggageKey("judgment.session_id",R)}static tag(R){S("BaseTracer.tag",()=>{if(!R||Array.isArray(R)&&R.length===0)return;let q=V._getProxyProvider().getActiveTracer();if(!q?.projectId||!q._client)return;if(!q.supportsLiveInstrumentation)return;let $=V._getCurrentTraceAndSpanId();if(!$)return;let[D]=$,P=Array.isArray(R)?R:[R];q._client.postV1projectsTracesByTraceIdTags(q.projectId,D,{tags:P}).catch((U)=>{F.error(`tag failed: ${String(U)}`)})})}static asyncEvaluate(R,f){S("BaseTracer.asyncEvaluate",()=>{let{judge:q,example:$}=R,P=V._getProxyProvider().getActiveTracer();if(!P?.projectId)return;if(!P.supportsLiveInstrumentation)return;let U=V._resolveSpan(f);if(!U?.isRecording())return;let E=P.getSpanProcessor(),O=U.spanContext(),Q=E.stateIncr(O,"pending_evals_count"),Y={project_id:P.projectId,eval_name:`async_evaluate_${q}_${Q}`,judges:[{name:q}],examples:[{...$,example_id:Bf.randomUUID(),created_at:new Date().toISOString(),trace_id:O.traceId,span_id:O.spanId}],is_offline:!1,is_behavior:!1},W=E.stateAppend(O,"pending_evals",Y);U.setAttribute("judgment.pending_trace_eval",JSON.stringify(W))})}}function Af(R,f){try{let q=Qf(R).map((D)=>D.replace(/^\.\.\./,"").split("=")[0].trim()).filter((D)=>D.length>0),$={};return q.forEach((D,P)=>{if(P<f.length)$[D]=f[P]}),$}catch{return{}}}var l,Bf,Nf="judgeval";var p=H(()=>{FR();J1();Yf();y();j();I();zR();u();x1();l=require("@opentelemetry/api"),Bf=require("crypto")});class A{_delegate;constructor(R,f,q,$){if(!R){this._delegate=null;return}this._delegate=new vf.OTLPTraceExporter({url:R,headers:{Authorization:`Bearer ${f}`,"X-Organization-Id":q,"X-Project-Id":$}})}export(R,f){F.info(`Exported ${R.length} spans`),this._delegate?.export(R,f)}shutdown(){return this._delegate?.shutdown()??Promise.resolve()}forceFlush(){return this._delegate?.forceFlush()??Promise.resolve()}}var vf;var xR=H(()=>{j();vf=require("@opentelemetry/exporter-trace-otlp-http")});var If,n;var P1=H(()=>{xR();If=require("@opentelemetry/core");n=class n extends A{constructor(){super("","","","")}export(R,f){f({code:If.ExportResultCode.SUCCESS})}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}}});class QR{_keyPredicate;constructor(R=U1){this._keyPredicate=R}onStart(R,f){let q=s(f)?.getAllEntries()??[];for(let[$,D]of q)if(this._keyPredicate($))R.setAttribute($,D.value)}onEnd(R){}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}var U1=()=>!0;var m1=H(()=>{zR()});function YR(R){return`${R.traceId}:${R.spanId}`}function zq(R){return R[0]===0&&R[1]===0}var Kf,g;var mR=H(()=>{FR();y();u();m1();Kf=require("@opentelemetry/sdk-trace-base");g=class g extends Kf.BatchSpanProcessor{tracer;_state=new Map;_spanFinalizers;_baggageProcessor;constructor(R,f,q){super(f,q);this.tracer=R,this._spanFinalizers=new FinalizationRegistry(($)=>{this._cleanupSpanState($)}),this._baggageProcessor=new QR}_cleanupSpanState(R){this._state.delete(R)}_registerSpan(R){let f=R.spanContext();if(!f.traceId||!f.spanId)return;let q=YR(f);this._spanFinalizers.register(R,q)}stateSet(R,f,q){let $=YR(R),D=this._state.get($);if(!D)D=new Map,this._state.set($,D);D.set(f,q)}stateGet(R,f,q){let $=YR(R),D=this._state.get($);if(!D?.has(f))return q;return D.get(f)}stateIncr(R,f){let q=YR(R),$=this._state.get(q);if(!$)$=new Map,this._state.set(q,$);let D=$.get(f),P=typeof D==="number"?D:0;return $.set(f,P+1),P}stateAppend(R,f,q){let $=YR(R),D=this._state.get($);if(!D)D=new Map,this._state.set($,D);let P=D.get(f),U=Array.isArray(P)?[...P,q]:[q];return D.set(f,U),U}_emitSpan(R,f=!1){let q=R.spanContext();if(!q.traceId)return;let $=this.stateIncr(q,"judgment.update_id"),D={...R.attributes,"judgment.update_id":$};if(f)delete D["judgment.pending_trace_eval"];let P=Object.create(R);Object.defineProperty(P,"attributes",{value:D,writable:!1});let U=zq(R.endTime)?R.startTime:R.endTime;Object.defineProperty(P,"endTime",{value:U,writable:!1}),super.onEnd(P)}emitPartial(){S("JudgmentSpanProcessor.emitPartial",()=>{let f=G.getInstance().getCurrentSpan();if(!f?.isRecording())return;let q=f.spanContext();if(!q.traceId)return;if(this.stateGet(q,"disable_partial_emit",!1))return;this._emitSpan(f,!0)})}onStart(R,f){S("JudgmentSpanProcessor.onStart",()=>{this._baggageProcessor.onStart(R,f),this._registerSpan(R)})}onEnd(R){S("JudgmentSpanProcessor.onEnd",()=>{let f=R.spanContext();if(!f.traceId){super.onEnd(R);return}let q=YR(f);try{if(!this.stateGet(f,"cancelled",!1))this._emitSpan(R)}finally{this._cleanupSpanState(q)}})}}});var WR;var k1=H(()=>{P1();mR();WR=class WR extends g{constructor(){super(null,new n)}onStart(R,f){}onEnd(R){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}emitPartial(){}stateSet(R,f,q){}stateGet(R,f,q){return q}stateIncr(R,f){return 0}stateAppend(R,f,q){return[q]}}});var O1,y1,B;var E1=H(()=>{XR();AR();j();vR();I();Z1();p();u();xR();P1();mR();k1();O1=require("@opentelemetry/resources"),y1=require("@opentelemetry/sdk-trace-node");B=class B extends V{_spanExporter=null;_spanProcessor=null;constructor(R,f,q,$,D,P,U,E,O,Q){super(R,f,q,$,D,P,U,E,O,Q)}static async init(R={}){let f=R.apiKey??qR,q=R.organizationId??$R,$=R.apiUrl??DR,D=R.projectName??null,P=R.serializer??w,U=!0;if(!D)F.warning("project_name not provided. Tracer will not export spans."),U=!1;if(!f)F.warning("api_key not provided. Tracer will not export spans."),U=!1;if(!q)F.warning("organization_id not provided. Tracer will not export spans."),U=!1;if(!$)F.warning("api_url not provided. Tracer will not export spans."),U=!1;let E=null,O=null;if(U&&D&&f&&q&&$){if(E=new c($,f,q),O=await PR(E,D).catch(()=>null),!O)F.warning(`Project '${D}' not found. Tracer will not export spans.`),U=!1}let Q={"service.name":D??"unknown","telemetry.sdk.name":"judgeval","telemetry.sdk.version":gR};if(R.environment)Q["deployment.environment"]=R.environment;if(R.resourceAttributes)Object.assign(Q,R.resourceAttributes);let Y=O1.defaultResource().merge(O1.resourceFromAttributes(Q)),W=new y1.NodeTracerProvider({resource:Y,sampler:R.sampler,spanLimits:R.spanLimits}),C=new B(D,O,f,q,$,R.environment??null,P,W,E,U);if(U){let b=new y1.NodeTracerProvider({resource:Y,sampler:R.sampler,spanLimits:R.spanLimits,spanProcessors:[C.getSpanProcessor(),...R.spanProcessors??[]]});C._tracerProvider=b}if(G.getInstance().register(C),R.setActive??!0)C.setActive();return C}getSpanExporter(){if(this._spanExporter)return this._spanExporter;if(!this._enableMonitoring||!this.projectId||!this.apiKey||!this.organizationId||!this.apiUrl)this._spanExporter=new n;else{let R=this.apiUrl.endsWith("/")?this.apiUrl+"otel/v1/traces":this.apiUrl+"/otel/v1/traces";this._spanExporter=new A(R,this.apiKey,this.organizationId,this.projectId)}return this._spanExporter}getSpanProcessor(){if(this._spanProcessor)return this._spanProcessor;if(!this._enableMonitoring)this._spanProcessor=new WR;else this._spanProcessor=new g(this,this.getSpanExporter());return this._spanProcessor}}});var HR;var L1=H(()=>{JR();mR();HR=class HR extends g{_dataset;_exampleFields;_seenTraceIds=new Set;constructor(R,f,q){super(R,f);this._dataset=q.dataset,this._exampleFields={...q.exampleFields??{}}}_maybeCreateExample(R){if(R.parentSpanContext)return;let f=R.spanContext();if(!f?.traceId)return;if(this._seenTraceIds.has(f.traceId))return;this._seenTraceIds.add(f.traceId);let q=m.create({...this._exampleFields,offline_trace_id:f.traceId});this._dataset.push(q)}onEnd(R){try{this._maybeCreateExample(R)}finally{super.onEnd(R)}}}});var lf={};LR(lf,{OfflineTracer:()=>i});var V1,N1,uf="otel/v1/offline-traces",i;var F1=H(()=>{XR();AR();vR();I();Z1();u();E1();xR();L1();V1=require("@opentelemetry/resources"),N1=require("@opentelemetry/sdk-trace-node");i=class i extends B{supportsLiveInstrumentation=!1;_offlineApiUrl;_offlineApiKey;_offlineOrganizationId;_offlineProjectId;_dataset;_exampleFields;_offlineSpanExporter=null;_offlineSpanProcessor=null;constructor(R){super(R.projectName,R.projectId,R.apiKey,R.organizationId,R.apiUrl,R.environment,R.serializer,R.tracerProvider,R.client,!0);this._offlineApiUrl=R.apiUrl,this._offlineApiKey=R.apiKey,this._offlineOrganizationId=R.organizationId,this._offlineProjectId=R.projectId,this._dataset=R.dataset,this._exampleFields=R.exampleFields}static async create(R){let f=R.apiKey??qR,q=R.organizationId??$R,$=R.apiUrl??DR,D=R.projectName,P=R.serializer??w;if(!D)throw Error("projectName is required for OfflineTracer");if(!f)throw Error("apiKey is required for OfflineTracer");if(!q)throw Error("organizationId is required for OfflineTracer");if(!$)throw Error("apiUrl is required for OfflineTracer");let U=new c($,f,q),E;try{E=await PR(U,D)}catch(J){throw Error(`Project '${D}' not found; cannot start OfflineTracer: ${String(J)}`)}let O={"service.name":D,"telemetry.sdk.name":"judgeval","telemetry.sdk.version":gR,"judgment.offline":"true"};if(R.environment)O["deployment.environment"]=R.environment;if(R.resourceAttributes)Object.assign(O,R.resourceAttributes);let Q=V1.defaultResource().merge(V1.resourceFromAttributes(O)),Y=new i({projectName:D,projectId:E,apiKey:f,organizationId:q,apiUrl:$,environment:R.environment??null,serializer:P,tracerProvider:new N1.NodeTracerProvider({resource:Q}),client:U,dataset:R.dataset,exampleFields:{...R.exampleFields??{}}}),W=new N1.NodeTracerProvider({resource:Q,sampler:R.sampler,spanLimits:R.spanLimits,spanProcessors:[Y.getSpanProcessor(),...R.spanProcessors??[]]});if(Y._tracerProvider=W,G.getInstance().register(Y),R.setActive??!0)Y.setActive();return Y}getSpanExporter(){if(this._offlineSpanExporter)return this._offlineSpanExporter;let R=this._offlineApiUrl.endsWith("/")?this._offlineApiUrl+uf:this._offlineApiUrl+"/"+uf;return this._offlineSpanExporter=new A(R,this._offlineApiKey,this._offlineOrganizationId,this._offlineProjectId),this._offlineSpanExporter}getSpanProcessor(){if(this._offlineSpanProcessor)return this._offlineSpanProcessor;return this._offlineSpanProcessor=new HR(this,this.getSpanExporter(),{dataset:this._dataset,exampleFields:this._exampleFields}),this._offlineSpanProcessor}}});var Aq={};LR(Aq,{wrapOpenAI:()=>oR,wrap:()=>tR,validateDatasetSchema:()=>dR,propagation:()=>D1,inferSchemaFromExamples:()=>sR,baggage:()=>f1,Tracer:()=>B,OfflineTracer:()=>i,OfflineTestsFactory:()=>CR,OfflineTestRunner:()=>SR,OfflineJudgmentSpanProcessor:()=>HR,NoOpSpanProcessor:()=>WR,NoOpSpanExporter:()=>n,JudgmentTracerProvider:()=>G,JudgmentSpanExporter:()=>A,JudgmentBaggageSpanProcessor:()=>QR,JudgmentBaggagePropagator:()=>d,Judgeval:()=>W1,Judge:()=>UR,Example:()=>m,Evaluation:()=>ER,Dataset:()=>r,BaseTracer:()=>V,AgentJudgeFactory:()=>VR,ALLOW_ALL_BAGGAGE_KEYS:()=>U1});module.exports=af(Aq);XR();AR();vR();j();class UR{}j();var C1=hR(GR(),1);j();var X=hR(GR(),1),Dq=2000;class OR{_client;_projectId;_projectName;constructor(R,f,q){this._client=R,this._projectId=f,this._projectName=q}async _poll(R,f,q,$){let D=Date.now();while(!0){let P=(Date.now()-D)/1000;if(P>$)throw Error(`Evaluation timed out after ${$}s`);let U=await this._client.getV1projectsExperimentsByRunId(R,f),E=U.results??[];if(E.length>=q){let Q=U.ui_results_url??"Failed to get UI results URL";return console.log(`${X.default.green("✓")} Evals completed and saved in ${X.default.bold(`${P.toFixed(1)}s`)}`),{results:E,url:Q}}await new Promise((Q)=>setTimeout(Q,Dq))}}_displayResults(R,f,q,$){let D=[],P=0,U=0;console.log();for(let E=0;E<f.length;E++){let O=f[E],Q=O.scorers.every((Y)=>Boolean(Y.success));if(Q)P++,console.log(`${X.default.green("✓")} Example ${E+1}: ${X.default.green("PASSED")}`);else U++,console.log(`${X.default.red("✗")} Example ${E+1}: ${X.default.red("FAILED")}`);for(let Y of O.scorers){let W=Y.score!==null?Y.score.toFixed(3):"N/A",C=Y.success?X.default.green(W):X.default.red(W);console.log(` ${X.default.dim(`${Y.name}:`)} ${C} ${X.default.dim(`(threshold: ${Y.threshold})`)}`)}D.push({success:Q,scorers:O.scorers,example:R[E]})}if(console.log(),P===D.length)console.log(`${X.default.bold(X.default.green("✓ All tests passed!"))} (${P}/${D.length})`);else console.log(`${X.default.bold(X.default.yellow("⚠ Results:"))} ${X.default.green(`${P} passed`)} | ${X.default.red(`${U} failed`)}`);if(console.log(`${X.default.dim("View full details:")} ${X.default.underline(q)}`),console.log(),$&&D.some((E)=>!E.success)){let E=[`Evaluation failed: ${U}/${D.length} examples failed`];for(let O=0;O<D.length;O++)if(!D[O].success){E.push(` Example ${O+1}:`);for(let Q of D[O].scorers)if(!Q.success){if(E.push(` ${Q.name}: ${Q.score!==null?Q.score.toFixed(3):"N/A"} (threshold: ${Q.threshold})`),Q.reason)E.push(` ${Q.reason}`)}}throw Error(E.join(`
|
|
4
|
+
`))}return D}async run(R,f,q,$=!1,D=300){if(!this._projectId)return F.error("Project ID is not resolved. Evaluation requires a valid project."),[];let P=this._projectId,U=crypto.randomUUID(),E=new Date().toISOString();console.log(),console.log(X.default.bold(X.default.cyan("Starting Evaluation"))),console.log(`${X.default.dim("Run:")} ${q}`),console.log(`${X.default.dim("Project:")} ${this._projectName}`),console.log(`${X.default.dim("Examples:")} ${R.length} | ${X.default.dim("Scorers:")} ${f.length}`),console.log();let O=this._buildPayload(U,P,q,E,R,f),Q=await this._submit(P,U,R,f,O),{results:Y,url:W}=await this._poll(P,U,Q,D);return this._displayResults(R,Y,W,$)}}class uR extends OR{_buildPayload(R,f,q,$,D,P){return{id:R,project_id:f,eval_name:q,created_at:$,examples:D.map((U)=>U.toJSON()),judgment_scorers:[],custom_scorers:[]}}async _submit(R,f,q,$,D){let P=Date.now(),U=q.flatMap((W,C)=>$.map((J)=>J.score(W).then((b)=>({exampleIdx:C,scorer:J,result:b,error:null})).catch((b)=>({exampleIdx:C,scorer:J,result:null,error:String(b)})))),E=await Promise.all(U),O=((Date.now()-P)/1000).toFixed(1);console.log(`${C1.default.green("✓")} Scoring completed in ${C1.default.bold(`${O}s`)}`);let Q=new Map;for(let W of E){let C=Q.get(W.exampleIdx);if(!C)C=[],Q.set(W.exampleIdx,C);C.push(W)}let Y=q.map((W,C)=>{return{scorers_data:(Q.get(C)??[]).map((b)=>{if(b.error!==null)return{scorer_name:b.scorer.constructor.name,value:0,reason:"",error:b.error};let h=b.result;return{scorer_name:b.scorer.constructor.name,value:h.value,reason:h.reason,...h.citations&&{citations:h.citations.map((Z)=>({span_id:Z.spanId,span_attribute:Z.spanAttribute}))}}}),data_object:W.toJSON()}});return await this._client.postV1projectsEvalResultsExamples(R,{results:Y,run:D}),q.length}}var i1=hR(GR(),1);class lR extends OR{_buildPayload(R,f,q,$,D,P){return{id:R,project_id:f,eval_name:q,created_at:$,examples:D.map((U)=>U.toJSON()),judgment_scorers:P.map((U)=>({name:U})),custom_scorers:[]}}async _submit(R,f,q,$,D){return await this._client.postV1projectsEvalQueueExamples(R,D),console.log(`${i1.default.green("✓")} Evaluation submitted`),q.length}}class ER{_local;_hosted;constructor(R,f,q){this._local=new uR(R,f,q),this._hosted=new lR(R,f,q)}run(R){let{examples:f,scorers:q,evalRunName:$,assertTest:D=!1,timeoutSeconds:P=300}=R,U=q.filter((O)=>typeof O==="string"),E=q.filter((O)=>O instanceof UR);if(E.length>0&&U.length>0)return F.error("Running both local and hosted scorers is not supported. Please run your evaluation with either local or hosted scorers, but not both."),Promise.resolve([]);if(E.length===0&&U.length===0)return F.error("No valid local or hosted scorers provided. Please provide at least one local or hosted scorer."),Promise.resolve([]);if(E.length>0)return this._local.run(f,E,$,D,P);return this._hosted.run(f,U,$,D,P)}}class pR{_client;_projectId;_projectName;constructor(R,f,q){this._client=R,this._projectId=f,this._projectName=q}create(){return new ER(this._client,this._projectId,this._projectName)}}JR();j();JR();class r{name;projectId;projectName;datasetKind;examples;_client;constructor(R){this.name=R.name,this.projectId=R.projectId,this.projectName=R.projectName,this.datasetKind=R.datasetKind??"example",this.examples=R.examples??[],this._client=R.client??null}async addExamples(R,f=100){if(!this._client)return;for(let q=0;q<R.length;q+=f){let $=R.slice(q,q+f);await this._client.postV1projectsDatasetsByDatasetIdentifierExamples(this.projectId,this.name,{examples:$.map((D)=>D.toJSON())})}}async addFromJson(R,f=100){let{readFile:q}=await import("fs/promises"),$=await q(R,"utf-8"),P=JSON.parse($).map((U)=>{if(typeof U!=="object"||U===null)throw Error("Each item in the JSON array must be an object");return m.create(U)});await this.addExamples(P,f)}get length(){return this.examples.length}[Symbol.iterator](){return this.examples[Symbol.iterator]()}toString(){return`Dataset(name=${this.name}, examples=${this.examples.length})`}}var Pq="trace";function dR(R){if(typeof R!=="object"||R===null||Array.isArray(R))throw Error("Dataset schema must be a JSON object.");let f=R;if(f.type!=="object")throw Error('Dataset schema must declare top-level type "object".');let q=f.properties;if(typeof q!=="object"||q===null||Array.isArray(q))throw Error("Dataset schema must declare a 'properties' object.");let $=Object.entries(q).filter(([,D])=>typeof D==="object"&&D!==null&&D.type===Pq).map(([D])=>D);if($.length>1)throw Error(`A dataset may declare at most one trace column; found ${$.length}: ${$.join(", ")}.`)}function Uq(R){if(typeof R==="boolean")return"boolean";if(typeof R==="number")return Number.isInteger(R)?"integer":"number";if(typeof R==="string")return"string";if(Array.isArray(R))return"array";if(typeof R==="object"&&R!==null)return"object";return"string"}function sR(R){if(R.length===0)throw Error("Cannot infer a dataset schema without examples. Pass an explicit `schema` to client.datasets.create().");let f={},q=null;for(let $ of R){let D=new Set;for(let[P,U]of Object.entries($.properties)){if(U===null||U===void 0)continue;if(D.add(P),!(P in f))f[P]={type:Uq(U)}}if(q===null)q=D;else if(q.size!==D.size||![...q].every((P)=>D.has(P)))throw Error("All examples must share the same set of fields (dataset schemas require all declared properties). Pass an explicit `schema` or make all examples homogeneous.")}return{type:"object",properties:f}}class nR{_client;_projectId;_projectName;constructor(R,f,q){this._client=R,this._projectId=f,this._projectName=q}async get(R){let f=this._expectProjectId();if(!f)return null;let q=await this._client.getV1projectsDatasetsByDatasetIdentifier(f,R),$=q.dataset_kind??"example",D=(q.examples??[]).map((P)=>m.from({...P.data??{},example_id:P.example_id,created_at:P.created_at??""}));return new r({name:R,projectId:f,projectName:this._projectName,datasetKind:$,examples:D,client:this._client})}async create(R,f={}){let q=this._expectProjectId();if(!q)return null;let{examples:$=[],overwrite:D=!1,batchSize:P=100,schema:U}=f,E;if(U!==void 0)dR(U),E=U;else{if($.length===0)throw Error("Datasets require a JSON Schema. Pass `schema` to create(), or provide `examples` to infer one.");E=sR($)}await this._client.postV1projectsDatasets(q,{name:R,examples:[],dataset_kind:"example",overwrite:D,schema:E});let O=new r({name:R,projectId:q,projectName:this._projectName,examples:$,client:this._client});if($.length>0)await O.addExamples($,P);return O}list(){let R=this._expectProjectId();if(!R)return Promise.resolve(null);return this._client.getV1projectsDatasets(R)}_expectProjectId(){if(!this._projectId)return F.error("Project ID is not resolved. Dataset operations require a valid project."),null;return this._projectId}}j();class VR{_client;_projectId;_projectName;constructor(R,f,q){this._client=R,this._projectId=f,this._projectName=q}async create(R){let f=this._expectProjectId();if(!f)return null;let q={name:R.name,prompt:R.prompt,model:R.model,score_type:R.scoreType};if(R.description!==void 0)q.description=R.description;if(R.judgeDescription!==void 0)q.judge_description=R.judgeDescription;if(R.categories!==void 0)q.categories=R.categories;if(R.minScore!==void 0)q.min_score=R.minScore;if(R.maxScore!==void 0)q.max_score=R.maxScore;return{judgeId:(await this._client.postV1projectsJudges(f,q)).judge_id,name:R.name,prompt:R.prompt,model:R.model,scoreType:R.scoreType,description:R.description??null,judgeDescription:R.judgeDescription??null,categories:R.categories??null,minScore:R.minScore??null,maxScore:R.maxScore??null,majorVersion:0,minorVersion:0}}async update(R){let f=this._expectProjectId();if(!f)return null;let q={};if(R.prompt!==void 0)q.prompt=R.prompt;if(R.model!==void 0)q.model=R.model;if(R.scoreType!==void 0)q.score_type=R.scoreType;if(R.description!==void 0)q.description=R.description;if(R.judgeDescription!==void 0)q.judge_description=R.judgeDescription;if(R.categories!==void 0)q.categories=R.categories;if(R.minScore!==void 0)q.min_score=R.minScore;if(R.maxScore!==void 0)q.max_score=R.maxScore;if(R.sourceMajorVersion!==void 0)q.source_major_version=R.sourceMajorVersion;if(R.sourceMinorVersion!==void 0)q.source_minor_version=R.sourceMinorVersion;if(R.targetMajorVersion!==void 0)q.target_major_version=R.targetMajorVersion;if(R.targetMinorVersion!==void 0)q.target_minor_version=R.targetMinorVersion;let $=await this._client.patchV1projectsJudgesByJudgeId(f,R.judgeId,q);return Oq($)}_expectProjectId(){if(!this._projectId)return F.error("Project ID is not resolved. Agent judge operations require a valid project."),null;return this._projectId}}function Oq(R){let f=R.judge;return{judgeId:f.id,name:f.name,prompt:f.prompt??"",model:f.model??"",scoreType:f.score_type,description:f.description??null,judgeDescription:f.judge_description??null,categories:f.categories??null,minScore:f.min_score??null,maxScore:f.max_score??null,majorVersion:f.major_version??null,minorVersion:f.minor_version??null}}j();j();E1();F1();u();function Q1(R){let f=Array.isArray(R.judges)?R.judges.filter((q)=>typeof q==="object"&&q!==null):[];return{id:typeof R.id==="string"?R.id:"",name:typeof R.name==="string"?R.name:"",datasetId:typeof R.dataset_id==="string"?R.dataset_id:"",description:typeof R.description==="string"?R.description:null,createdAt:typeof R.created_at==="string"?R.created_at:null,judges:f}}function pf(R){let f=[];for(let q of R)for(let $ of q.scorers)if($.success!==null&&$.success!==void 0)f.push($.success);if(f.length===0)return null;return f.every((q)=>q)}var _=hR(GR(),1);function k(R){return typeof R==="object"&&R!==null&&!Array.isArray(R)?R:{}}function RR(R){return Array.isArray(R)?R:[]}function M(R){return typeof R==="string"?R:""}function df(R){return R?"Yes":"No"}function jq(R){let{score_type:f,bool_value:q,str_value:$,num_value:D}=R;if(f==="binary")return typeof q==="boolean"?df(q):null;if(f==="categorical")return typeof $==="string"?$:null;if(f==="numeric")return typeof D==="number"?D:null;if(typeof q==="boolean")return df(q);if(typeof $==="string")return $;if(typeof D==="number")return D;return null}function xq(R){if(typeof R==="object"&&R!==null){let f=R.text;return typeof f==="string"&&f?f:null}if(typeof R==="string"){try{let f=JSON.parse(R);if(typeof f==="object"&&f!==null){let q=f.text;if(typeof q==="string")return q||null}}catch{}return R||null}return null}function sf(R){if(!R||R.length===0)return;let f=[];for(let q of R){if(!q.name&&!q.judgeId)throw Error("judgeVersions entries require a 'name' (or 'judgeId') key");let $={};if(q.judgeId!==void 0)$.judge_id=q.judgeId;if(q.name!==void 0)$.name=q.name;if(q.tag!==void 0)$.tag=q.tag;if(q.version!==void 0)$.version=q.version;if(q.majorVersion!==void 0)$.major_version=q.majorVersion;if(q.minorVersion!==void 0)$.minor_version=q.minorVersion;f.push($)}return f}function nf(R,f,q){let $=[];for(let D of R){let P=M(D.example_id),U=k(D.data),E=[];for(let O of RR(D.scorers)){let Q=k(O),Y={judge_id:Q.judge_id,judge_major_version:Q.judge_major_version,judge_minor_version:Q.judge_minor_version},W=xq(Q.reason);if(W)Y.reason=W;E.push({name:M(Q.judge_name),value:jq(Q),scoreType:typeof Q.score_type==="string"?Q.score_type:null,error:typeof Q.error==="string"?Q.error:null,success:typeof Q.success==="boolean"?Q.success:null,metadata:Y})}if(q){let O=Boolean(q({...U},E));for(let Q of E)Q.success=O}$.push({exampleId:P,data:U,scorers:E,agentOfflineTraceId:f[P]})}return $}function gf(R){if(R.status!=="completed")throw Error(`Test run ${R.testRunId} finished with status '${R.status}'`);let f=R.results.filter((q)=>q.scorers.some(($)=>$.success===!1)).map((q)=>q.exampleId);if(f.length>0||R.passed!==!0)throw Error(`Test run ${R.testRunId} failed its pass condition for ${f.length} example(s): ${JSON.stringify(f)}`)}function of(R,f,q){console.log(),console.log(_.default.bold(_.default.cyan("Starting Offline Test"))),console.log(`${_.default.dim("Config:")} ${R}`),console.log(`${_.default.dim("Project:")} ${f}`),console.log(`${_.default.dim("Examples:")} ${q}`),console.log()}function tf(R,f){if(console.log(),R.forEach((q,$)=>{if(q.scorers.some((P)=>P.success!==null&&P.success!==void 0)){let P=q.scorers.every((U)=>U.success===!0);console.log(P?`${_.default.green("✓")} Example ${$+1}: ${_.default.green("PASSED")}`:`${_.default.red("✗")} Example ${$+1}: ${_.default.red("FAILED")}`)}else console.log(`${_.default.cyan("•")} Example ${$+1}:`);for(let P of q.scorers){if(P.error){console.log(` ${_.default.dim(`${P.name}:`)} ${_.default.red(`error: ${P.error}`)}`);continue}let U=P.value===null?"N/A":String(P.value),E=P.success===!0?_.default.green(U):P.success===!1?_.default.red(U):U;console.log(` ${_.default.dim(`${P.name}:`)} ${E}`)}}),console.log(),f)console.log(`${_.default.dim("View full details:")} ${_.default.underline(f)}`),console.log()}var mq=new Set(["completed","error","cancelled"]),kq=100,yq=200,Lq=2000,Y1=1e4;class SR{_client;_projectId;_projectName;constructor(R,f,q){this._client=R,this._projectId=f,this._projectName=q}async resolveDatasetVersion(R,f){let q=await this._client.getV1projectsDatasetsByDatasetIdentifierVersions(this._projectId,R.datasetId),$=RR(q.versions).filter((D)=>typeof D==="object"&&D!==null).map((D)=>D);if(f===void 0){if($.length===0)throw Error(`Dataset of test config '${R.name}' has no versions`);return $.reduce((D,P)=>Number(P.version_number??0)>Number(D.version_number??0)?P:D)}if(typeof f==="number"){let D=$.find((P)=>Number(P.version_number??0)===f);if(D)return D}else{let D=$.find((P)=>P.version_id===f);if(D)return D}throw Error(`Dataset version ${JSON.stringify(f)} does not exist for the dataset of test config '${R.name}'`)}async fetchExamples(R,f){let q=[],$,D,P=0;for(;;){if(P>=Y1)throw Error(`fetchExamples exceeded ${Y1} pages for dataset of test config '${R.name}'`);let U=await this._client.getV1projectsDatasetsByDatasetIdentifierPage(this._projectId,R.datasetId,String(f),String(kq),$,D);P+=1;for(let Q of RR(U.entries)){let Y=k(k(Q).example),W=Y.data;if(typeof W==="string")try{W=JSON.parse(W)}catch{W={}}q.push({exampleId:M(Y.example_id),data:k(W),offlineTraceId:typeof Y.offline_trace_id==="string"?Y.offline_trace_id:null,createdAt:typeof Y.created_at==="string"?Y.created_at:null})}let E=k(U.metadata),O=k(E.nextCursor);if(!E.hasMore||Object.keys(O).length===0)break;$=M(O.created_at),D=M(O.example_id)}return q}createTestRun(R,f={}){let q={test_config_id:R.id,source:f.source??"sdk"};if(f.name)q.name=f.name;if(typeof f.datasetVersion==="number")q.dataset_version_number=f.datasetVersion;else if(typeof f.datasetVersion==="string")q.dataset_version_id=f.datasetVersion;let $=sf(f.judgeVersions);if($)q.judge_versions=$;let D=f.agentTraces??{};if(Object.keys(D).length>0)q.agent_traces=Object.entries(D).map(([P,U])=>({example_id:P,agent_offline_trace_id:U}));return this._client.postV1projectsTestRuns(this._projectId,q)}async runAgent(R,f){let q=[],$=G.getInstance().getActiveTracer();await i.create({projectName:this._projectName,apiKey:this._client.getApiKey(),organizationId:this._client.getOrganizationId(),apiUrl:this._client.getBaseUrl(),dataset:q,setActive:!0});let D={};try{let P=B.observe(R,{spanType:"agent"});for(let U of f){let E=q.length;try{await P(U.data)}catch(O){F.error(`Agent entrypoint raised for example ${U.exampleId}: ${String(O)}`)}for(let O of q.slice(E)){let Q=O.get("offline_trace_id");if(U.exampleId&&typeof Q==="string"){D[U.exampleId]=Q;break}}}}finally{if(await B.forceFlush(),$)$.setActive()}return D}async waitForCompletion(R,f){let q=Date.now();for(;;){if((Date.now()-q)/1000>f)throw Error(`Test run ${R} did not complete within ${f}s`);let $=await this._client.getV1projectsTestRunsByTestRunId(this._projectId,R),D=M(k($.test_run).status);if(mq.has(D))return D;await BR(Lq)}}async fetchItems(R){let f=[],q="",$,D=0;for(;;){if(D>=Y1)throw Error(`fetchItems exceeded ${Y1} pages for test run ${R}`);let P=await this._client.getV1projectsTestRunsByTestRunIdItems(this._projectId,R,String(yq),$);D+=1;for(let E of RR(P.results))f.push(k(E));if(!q)q=M(P.ui_results_url);let U=P.next_cursor;if(!P.has_more||typeof U!=="string"||!U)break;$=U}return{items:f,uiResultsUrl:q}}async reportSuccess(R,f,q,$){let D=new Map,P=new Map,U=(Y,W,C,J)=>`${Y}\x00${W}\x00${C}\x00${J}`,E=(Y,W)=>`${Y}\x00${W}`;for(let Y of RR(f.evaluation_runs)){let W=k(Y),C=W.run_id;if(typeof C!=="string"||!C)continue;D.set(U(M(W.example_id),M(W.judge_id),Number(W.judge_major_version??0),Number(W.judge_minor_version??0)),C),P.set(E(M(W.example_id),M(W.judge_name)),C)}let O=new Map;for(let Y of $)O.set(Y.exampleId,Y);let Q=[];for(let Y of q){let W=M(Y.example_id),C=O.get(W),J=C?C.scorers.map((h)=>h.success??null):[],b=RR(Y.scorers);for(let h=0;h<b.length;h+=1){let Z=k(b[h]),T=D.get(U(W,M(Z.judge_id),Number(Z.judge_major_version??0),Number(Z.judge_minor_version??0)))??P.get(E(W,M(Z.judge_name)));if(!T){F.warning(`No evaluation run ref for scorer ${M(Z.judge_name)} of example ${W}; skipping its success update`);continue}Q.push({evaluation_run_id:T,success:h<J.length?J[h]:null})}}if(Q.length===0)return;await this._client.patchV1projectsTestRunsByTestRunIdSuccess(this._projectId,R,{successes:Q})}async run(R,f={}){let{agentFunction:q,judgeVersions:$,datasetVersion:D,passConditionFn:P,assertTest:U=!1,timeoutSeconds:E=600,runName:O}=f;if(U&&!P)throw Error("assertTest=true requires a passConditionFn to decide whether each row passes.");let Q=await this.resolveDatasetVersion(R,D),Y=Number(Q.version_number??0),W=await this.fetchExamples(R,Y);of(R.name,this._projectName,W.length),F.info(`Dataset version ${Y}: ${W.length} example(s)`);let C=typeof D==="string"?D:Y,J={};if(q&&W.length>0)J=await this.runAgent(q,W);let b=await this.createTestRun(R,{datasetVersion:C,judgeVersions:$,agentTraces:J,name:O}),h=k(b.test_run),Z=M(h.id),T=M(b.ui_results_url);F.info(`Created test run ${Z} over ${W.length} examples`);let kR=await this.waitForCompletion(Z,E),{items:yR,uiResultsUrl:v}=await this.fetchItems(Z);if(v)T=v;let o=nf(yR,J,P);if(P)await this.reportSuccess(Z,b,yR,o);tf(o,T||void 0);let fR={testRunId:Z,status:kR,uiResultsUrl:T||void 0,results:o,agentOfflineTraceIds:J,passed:pf(o)};if(U)gf(fR);return fR}}var Nq=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function A1(R){return Nq.test(R)}class CR{_client;_projectId;_projectName;constructor(R,f,q){this._client=R,this._projectId=f,this._projectName=q}async createConfig(R,f,q,$){let D=this._expectProjectId();if(!D)return null;let P=[];for(let O of q)if(typeof O==="string")P.push(A1(O)?{judge_id:O}:{name:O});else if(O.judgeId)P.push({judge_id:O.judgeId});else if(O.name)P.push({name:O.name});else throw Error("judges entries must be judge names or objects with a 'judgeId' or 'name'");let U={name:R,judges:P};if($!==void 0)U.description=$;if(A1(f))U.dataset_id=f;else U.dataset_name=f;let E=await this._client.postV1projectsTestConfigs(D,U);return F.info(`Created test config ${R}`),Q1(E.test_config??{})}async getConfig(R){let f=this._expectProjectId();if(!f)return null;if(A1(R)){let D=await this._client.getV1projectsTestConfigsByTestConfigId(f,R);return Q1(D.test_config??{})}let $=(await this.listConfigs()??[]).find((D)=>D.name===R);if(!$)return F.error(`Test config '${R}' not found`),null;return $}async listConfigs(R){let f=this._expectProjectId();if(!f)return null;let q=await this._client.getV1projectsTestConfigs(f,R);return(Array.isArray(q.test_configs)?q.test_configs:[]).map((D)=>Q1(D))}async deleteConfig(R){let f=this._expectProjectId();if(!f)return!1;return await this._client.deleteV1projectsTestConfigsByTestConfigId(f,R),F.info(`Deleted test config ${R}`),!0}async run(R,f={}){let q=this._expectProjectId();if(!q)return null;let $=typeof R==="string"?await this.getConfig(R):R;if(!$||!$.id)return null;return new SR(this._client,q,this._projectName).run($,f)}_expectProjectId(){if(!this._projectId)return F.error("Project ID is not resolved. Offline-test operations require a valid project."),null;return this._projectId}}class W1{_client;_projectName;_projectId;constructor(R,f,q){this._client=R,this._projectName=f,this._projectId=q}static async create(R){let f=R.apiKey??qR,q=R.organizationId??$R,$=R.apiUrl??DR;if(!f)throw Error("API key is required");if(!q)throw Error("Organization ID is required");if(!$)throw Error("API URL is required");if(!R.projectName)throw Error("Project name is required");let D=new c($,f,q),P=null;try{P=await PR(D,R.projectName)}catch{F.warning(`Project '${R.projectName}' not found. Some operations requiring project_id will be skipped.`)}return new W1(D,R.projectName,P)}async offlineTracer(R){let{OfflineTracer:f}=await Promise.resolve().then(() => (F1(),lf));return f.create({...R,projectName:this._projectName,apiKey:this._client.getApiKey(),organizationId:this._client.getOrganizationId(),apiUrl:this._client.getBaseUrl()})}get datasets(){return new nR(this._client,this._projectId,this._projectName)}get evaluation(){return new pR(this._client,this._projectId,this._projectName)}get agentJudges(){return new VR(this._client,this._projectId,this._projectName)}get offlineTests(){return new CR(this._client,this._projectId,this._projectName)}}p();xR();P1();u();mR();k1();L1();m1();R1();zR();x1();E1();F1();J1();JR();
|
|
5
5
|
|
|
6
|
-
//# debugId=
|
|
6
|
+
//# debugId=A4B1A6E1DDC7F86A64756E2164756E21
|
|
7
7
|
//# sourceMappingURL=index.cjs.map
|