judgeval 0.5.0 → 0.7.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.
Files changed (137) hide show
  1. package/dist/Judgeval.d.ts +19 -0
  2. package/dist/Judgeval.d.ts.map +1 -0
  3. package/dist/data/APIScorerType.d.ts +10 -0
  4. package/dist/data/APIScorerType.d.ts.map +1 -0
  5. package/dist/data/Example.d.ts +20 -0
  6. package/dist/data/Example.d.ts.map +1 -0
  7. package/dist/data/ScorerData.d.ts +28 -0
  8. package/dist/data/ScorerData.d.ts.map +1 -0
  9. package/dist/data/ScoringResult.d.ts +24 -0
  10. package/dist/data/ScoringResult.d.ts.map +1 -0
  11. package/dist/data/index.d.ts +4 -3
  12. package/dist/data/index.d.ts.map +1 -1
  13. package/dist/evaluation/Evaluation.d.ts +9 -0
  14. package/dist/evaluation/Evaluation.d.ts.map +1 -0
  15. package/dist/evaluation/EvaluationFactory.d.ts +8 -0
  16. package/dist/evaluation/EvaluationFactory.d.ts.map +1 -0
  17. package/dist/evaluation/index.d.ts +3 -0
  18. package/dist/evaluation/index.d.ts.map +1 -0
  19. package/dist/index.cjs +3 -3
  20. package/dist/index.cjs.map +29 -29
  21. package/dist/index.d.ts +5 -10
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.mjs +3 -3
  24. package/dist/index.mjs.map +29 -29
  25. package/dist/index.umd.js +18 -3
  26. package/dist/index.umd.js.map +34 -29
  27. package/dist/internal/api/index.d.ts +5 -4
  28. package/dist/internal/api/index.d.ts.map +1 -1
  29. package/dist/internal/api/models/FetchExperimentRunResponse.d.ts +9 -0
  30. package/dist/internal/api/models/FetchExperimentRunResponse.d.ts.map +1 -0
  31. package/dist/internal/api/models/FetchPromptScorersRequest.d.ts +1 -0
  32. package/dist/internal/api/models/FetchPromptScorersRequest.d.ts.map +1 -1
  33. package/dist/internal/api/models/LogEvalResultsResponse.d.ts +8 -0
  34. package/dist/internal/api/models/LogEvalResultsResponse.d.ts.map +1 -0
  35. package/dist/internal/api/models/PromptScorer.d.ts +4 -0
  36. package/dist/internal/api/models/PromptScorer.d.ts.map +1 -1
  37. package/dist/internal/api/models/SavePromptScorerResponse.d.ts +2 -2
  38. package/dist/internal/api/models/SavePromptScorerResponse.d.ts.map +1 -1
  39. package/dist/internal/api/models/TraceEvaluationRun.d.ts +1 -0
  40. package/dist/internal/api/models/TraceEvaluationRun.d.ts.map +1 -1
  41. package/dist/internal/api/models.d.ts +2 -1
  42. package/dist/internal/api/models.d.ts.map +1 -1
  43. package/dist/judgmentAttributeKeys.d.ts +37 -0
  44. package/dist/judgmentAttributeKeys.d.ts.map +1 -0
  45. package/dist/scorers/APIScorer.d.ts +40 -0
  46. package/dist/scorers/APIScorer.d.ts.map +1 -0
  47. package/dist/scorers/BaseScorer.d.ts +6 -0
  48. package/dist/scorers/BaseScorer.d.ts.map +1 -0
  49. package/dist/scorers/ScorersFactory.d.ts +13 -0
  50. package/dist/scorers/ScorersFactory.d.ts.map +1 -0
  51. package/dist/scorers/builtIn/AnswerCorrectnessScorer.d.ts +11 -0
  52. package/dist/scorers/builtIn/AnswerCorrectnessScorer.d.ts.map +1 -0
  53. package/dist/scorers/builtIn/AnswerRelevancyScorer.d.ts +11 -0
  54. package/dist/scorers/builtIn/AnswerRelevancyScorer.d.ts.map +1 -0
  55. package/dist/scorers/builtIn/BuiltInScorersFactory.d.ts +9 -0
  56. package/dist/scorers/builtIn/BuiltInScorersFactory.d.ts.map +1 -0
  57. package/dist/scorers/builtIn/FaithfulnessScorer.d.ts +11 -0
  58. package/dist/scorers/builtIn/FaithfulnessScorer.d.ts.map +1 -0
  59. package/dist/scorers/builtIn/index.d.ts +5 -0
  60. package/dist/scorers/builtIn/index.d.ts.map +1 -0
  61. package/dist/scorers/customScorer/CustomScorer.d.ts +16 -0
  62. package/dist/scorers/customScorer/CustomScorer.d.ts.map +1 -0
  63. package/dist/scorers/customScorer/CustomScorerFactory.d.ts +5 -0
  64. package/dist/scorers/customScorer/CustomScorerFactory.d.ts.map +1 -0
  65. package/dist/scorers/customScorer/index.d.ts +3 -0
  66. package/dist/scorers/customScorer/index.d.ts.map +1 -0
  67. package/dist/scorers/index.d.ts +8 -4
  68. package/dist/scorers/index.d.ts.map +1 -1
  69. package/dist/scorers/promptScorer/PromptScorer.d.ts +35 -0
  70. package/dist/scorers/promptScorer/PromptScorer.d.ts.map +1 -0
  71. package/dist/scorers/promptScorer/PromptScorerFactory.d.ts +13 -0
  72. package/dist/scorers/promptScorer/PromptScorerFactory.d.ts.map +1 -0
  73. package/dist/scorers/promptScorer/index.d.ts +3 -0
  74. package/dist/scorers/promptScorer/index.d.ts.map +1 -0
  75. package/dist/tracer/BaseTracer.d.ts +48 -0
  76. package/dist/tracer/BaseTracer.d.ts.map +1 -0
  77. package/dist/tracer/BrowserTracer.d.ts +21 -9
  78. package/dist/tracer/BrowserTracer.d.ts.map +1 -1
  79. package/dist/tracer/BrowserTracerFactory.d.ts +8 -0
  80. package/dist/tracer/BrowserTracerFactory.d.ts.map +1 -0
  81. package/dist/tracer/NodeTracer.d.ts +24 -10
  82. package/dist/tracer/NodeTracer.d.ts.map +1 -1
  83. package/dist/tracer/NodeTracerFactory.d.ts +8 -0
  84. package/dist/tracer/NodeTracerFactory.d.ts.map +1 -0
  85. package/dist/tracer/exporters/JudgmentSpanExporter.d.ts +4 -77
  86. package/dist/tracer/exporters/JudgmentSpanExporter.d.ts.map +1 -1
  87. package/dist/tracer/exporters/NoOpSpanExporter.d.ts +4 -8
  88. package/dist/tracer/exporters/NoOpSpanExporter.d.ts.map +1 -1
  89. package/dist/tracer/index.d.ts +8 -4
  90. package/dist/tracer/index.d.ts.map +1 -1
  91. package/package.json +20 -18
  92. package/dist/constants.d.ts +0 -2
  93. package/dist/constants.d.ts.map +0 -1
  94. package/dist/data/evaluation-run.d.ts +0 -57
  95. package/dist/data/evaluation-run.d.ts.map +0 -1
  96. package/dist/data/example-params.d.ts +0 -13
  97. package/dist/data/example-params.d.ts.map +0 -1
  98. package/dist/data/example.d.ts +0 -4
  99. package/dist/data/example.d.ts.map +0 -1
  100. package/dist/internal/api/models/EvalResultsFetchResponse.d.ts +0 -10
  101. package/dist/internal/api/models/EvalResultsFetchResponse.d.ts.map +0 -1
  102. package/dist/judgment-client.d.ts +0 -15
  103. package/dist/judgment-client.d.ts.map +0 -1
  104. package/dist/scorers/adapters.d.ts +0 -7
  105. package/dist/scorers/adapters.d.ts.map +0 -1
  106. package/dist/scorers/api_scorers/answer-correctness-scorer.d.ts +0 -6
  107. package/dist/scorers/api_scorers/answer-correctness-scorer.d.ts.map +0 -1
  108. package/dist/scorers/api_scorers/answer-relevancy-scorer.d.ts +0 -6
  109. package/dist/scorers/api_scorers/answer-relevancy-scorer.d.ts.map +0 -1
  110. package/dist/scorers/api_scorers/faithfulness-scorer.d.ts +0 -6
  111. package/dist/scorers/api_scorers/faithfulness-scorer.d.ts.map +0 -1
  112. package/dist/scorers/api_scorers/index.d.ts +0 -6
  113. package/dist/scorers/api_scorers/index.d.ts.map +0 -1
  114. package/dist/scorers/api_scorers/instruction-adherence-scorer.d.ts +0 -6
  115. package/dist/scorers/api_scorers/instruction-adherence-scorer.d.ts.map +0 -1
  116. package/dist/scorers/api_scorers/prompt_scorer/base-prompt-scorer.d.ts +0 -21
  117. package/dist/scorers/api_scorers/prompt_scorer/base-prompt-scorer.d.ts.map +0 -1
  118. package/dist/scorers/api_scorers/prompt_scorer/index.d.ts +0 -5
  119. package/dist/scorers/api_scorers/prompt_scorer/index.d.ts.map +0 -1
  120. package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.d.ts +0 -6
  121. package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.d.ts.map +0 -1
  122. package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer.d.ts +0 -10
  123. package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer.d.ts.map +0 -1
  124. package/dist/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.d.ts +0 -8
  125. package/dist/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.d.ts.map +0 -1
  126. package/dist/scorers/example-scorer.d.ts +0 -13
  127. package/dist/scorers/example-scorer.d.ts.map +0 -1
  128. package/dist/scorers/local-scorer.d.ts +0 -22
  129. package/dist/scorers/local-scorer.d.ts.map +0 -1
  130. package/dist/scorers/remote-scorer.d.ts +0 -20
  131. package/dist/scorers/remote-scorer.d.ts.map +0 -1
  132. package/dist/tracer/OpenTelemetryKeys.d.ts +0 -39
  133. package/dist/tracer/OpenTelemetryKeys.d.ts.map +0 -1
  134. package/dist/tracer/Tracer.d.ts +0 -49
  135. package/dist/tracer/Tracer.d.ts.map +0 -1
  136. package/dist/tracer/TracerConfiguration.d.ts +0 -93
  137. package/dist/tracer/TracerConfiguration.d.ts.map +0 -1
@@ -0,0 +1,19 @@
1
+ import { EvaluationFactory } from "./evaluation/EvaluationFactory";
2
+ import { ScorersFactory } from "./scorers/ScorersFactory";
3
+ import { BrowserTracerFactory } from "./tracer/BrowserTracerFactory";
4
+ import { NodeTracerFactory } from "./tracer/NodeTracerFactory";
5
+ export interface JudgevalConfig {
6
+ apiKey?: string;
7
+ organizationId?: string;
8
+ apiUrl?: string;
9
+ }
10
+ export declare class Judgeval {
11
+ private readonly internalClient;
12
+ protected constructor(config?: JudgevalConfig);
13
+ static create(config?: JudgevalConfig): Judgeval;
14
+ get nodeTracer(): NodeTracerFactory;
15
+ get browserTracer(): BrowserTracerFactory;
16
+ get scorers(): ScorersFactory;
17
+ get evaluation(): EvaluationFactory;
18
+ }
19
+ //# sourceMappingURL=Judgeval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Judgeval.d.ts","sourceRoot":"","sources":["../src/Judgeval.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoB;IAEnD,SAAS,aAAa,MAAM,GAAE,cAAmB;IAkBjD,MAAM,CAAC,MAAM,CAAC,MAAM,GAAE,cAAmB,GAAG,QAAQ;IAIpD,IAAI,UAAU,IAAI,iBAAiB,CAElC;IAED,IAAI,aAAa,IAAI,oBAAoB,CAExC;IAED,IAAI,OAAO,IAAI,cAAc,CAE5B;IAED,IAAI,UAAU,IAAI,iBAAiB,CAElC;CACF"}
@@ -0,0 +1,10 @@
1
+ export declare const APIScorerType: {
2
+ readonly PROMPT_SCORER: "Prompt Scorer";
3
+ readonly TRACE_PROMPT_SCORER: "Trace Prompt Scorer";
4
+ readonly FAITHFULNESS: "Faithfulness";
5
+ readonly ANSWER_RELEVANCY: "Answer Relevancy";
6
+ readonly ANSWER_CORRECTNESS: "Answer Correctness";
7
+ readonly CUSTOM: "Custom";
8
+ };
9
+ export type APIScorerType = (typeof APIScorerType)[keyof typeof APIScorerType];
10
+ //# sourceMappingURL=APIScorerType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"APIScorerType.d.ts","sourceRoot":"","sources":["../../src/data/APIScorerType.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;;;;;;;CAOhB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { Example as APIExample } from "../internal/api/models";
2
+ export interface ExampleConfig {
3
+ name?: string;
4
+ properties?: Record<string, unknown>;
5
+ exampleId?: string;
6
+ createdAt?: string;
7
+ }
8
+ export declare class Example {
9
+ exampleId: string;
10
+ createdAt: string;
11
+ name?: string | null;
12
+ private properties;
13
+ private constructor();
14
+ static create(data: Record<string, unknown>): Example;
15
+ setProperty(key: string, value: unknown): this;
16
+ getProperty(key: string): unknown;
17
+ getProperties(): Record<string, unknown>;
18
+ toModel(): APIExample;
19
+ }
20
+ //# sourceMappingURL=Example.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Example.d.ts","sourceRoot":"","sources":["../../src/data/Example.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpE,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,OAAO;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,UAAU,CAA0B;IAE5C,OAAO;IAOP,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAMrD,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAK9C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIjC,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIxC,OAAO,IAAI,UAAU;CAQtB"}
@@ -0,0 +1,28 @@
1
+ import type { ScorerData as APIScorerData } from "../internal/api/models";
2
+ export interface ScorerDataConfig {
3
+ name?: string;
4
+ threshold?: number;
5
+ success?: boolean;
6
+ score?: number;
7
+ reason?: string;
8
+ strictMode?: boolean;
9
+ evaluationModel?: string;
10
+ error?: string;
11
+ additionalMetadata?: Record<string, unknown>;
12
+ id?: string;
13
+ }
14
+ export declare class ScorerData {
15
+ name?: string | null;
16
+ threshold?: number | null;
17
+ success?: boolean | null;
18
+ score?: number | null;
19
+ reason?: string | null;
20
+ strictMode?: boolean | null;
21
+ evaluationModel?: string | null;
22
+ error?: string | null;
23
+ additionalMetadata?: Record<string, unknown>;
24
+ id?: string | null;
25
+ constructor(config?: ScorerDataConfig);
26
+ toModel(): APIScorerData;
27
+ }
28
+ //# sourceMappingURL=ScorerData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScorerData.d.ts","sourceRoot":"","sources":["../../src/data/ScorerData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE1E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,UAAU;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEP,MAAM,GAAE,gBAAqB;IAazC,OAAO,IAAI,aAAa;CAkCzB"}
@@ -0,0 +1,24 @@
1
+ import type { ScoringResult as APIScoringResult, OtelTraceSpan } from "../internal/api/models";
2
+ import { Example } from "./Example";
3
+ import { ScorerData } from "./ScorerData";
4
+ export interface ScoringResultConfig {
5
+ success?: boolean;
6
+ scorersData?: ScorerData[];
7
+ name?: string;
8
+ dataObject?: OtelTraceSpan | Example;
9
+ traceId?: string;
10
+ runDuration?: number;
11
+ evaluationCost?: number;
12
+ }
13
+ export declare class ScoringResult {
14
+ success?: boolean | null;
15
+ scorersData?: ScorerData[];
16
+ name?: string | null;
17
+ dataObject?: OtelTraceSpan | Example | null;
18
+ traceId?: string | null;
19
+ runDuration?: number | null;
20
+ evaluationCost?: number | null;
21
+ constructor(config?: ScoringResultConfig);
22
+ toModel(): APIScoringResult;
23
+ }
24
+ //# sourceMappingURL=ScoringResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScoringResult.d.ts","sourceRoot":"","sources":["../../src/data/ScoringResult.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,IAAI,gBAAgB,EACjC,aAAa,EACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,aAAa,GAAG,OAAO,GAAG,IAAI,CAAC;IAC5C,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEnB,MAAM,GAAE,mBAAwB;IAU5C,OAAO,IAAI,gBAAgB;CA4B5B"}
@@ -1,4 +1,5 @@
1
- export * from "./evaluation-run";
2
- export * from "./example";
3
- export * from "./example-params";
1
+ export * from "./APIScorerType";
2
+ export { Example, type ExampleConfig } from "./Example";
3
+ export { ScorerData, type ScorerDataConfig } from "./ScorerData";
4
+ export { ScoringResult, type ScoringResultConfig } from "./ScoringResult";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { JudgmentApiClient } from "../internal/api";
2
+ export interface EvaluationConfig {
3
+ client: JudgmentApiClient;
4
+ }
5
+ export declare class Evaluation {
6
+ private readonly client;
7
+ constructor(config: EvaluationConfig);
8
+ }
9
+ //# sourceMappingURL=Evaluation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Evaluation.d.ts","sourceRoot":"","sources":["../../src/evaluation/Evaluation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;gBAE/B,MAAM,EAAE,gBAAgB;CAGrC"}
@@ -0,0 +1,8 @@
1
+ import { JudgmentApiClient } from "../internal/api";
2
+ import { Evaluation, type EvaluationConfig } from "./Evaluation";
3
+ export declare class EvaluationFactory {
4
+ private readonly client;
5
+ constructor(client: JudgmentApiClient);
6
+ create(config?: Omit<EvaluationConfig, "client">): Evaluation;
7
+ }
8
+ //# sourceMappingURL=EvaluationFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvaluationFactory.d.ts","sourceRoot":"","sources":["../../src/evaluation/EvaluationFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEjE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;gBAE/B,MAAM,EAAE,iBAAiB;IAIrC,MAAM,CAAC,MAAM,GAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAM,GAAG,UAAU;CAMlE"}
@@ -0,0 +1,3 @@
1
+ export { Evaluation, type EvaluationConfig } from "./Evaluation";
2
+ export { EvaluationFactory } from "./EvaluationFactory";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/evaluation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
- var{defineProperty:L,getOwnPropertyNames:ot,getOwnPropertyDescriptor:it}=Object,nt=Object.prototype.hasOwnProperty;var q=new WeakMap,at=(t)=>{var e=q.get(t),r;if(e)return e;if(e=L({},"__esModule",{value:!0}),t&&typeof t==="object"||typeof t==="function")ot(t).map((s)=>!nt.call(e,s)&&L(e,s,{get:()=>t[s],enumerable:!(r=it(t,s))||r.enumerable}));return q.set(t,e),e};var lt=(t,e)=>{for(var r in e)L(t,r,{get:e[r],enumerable:!0,configurable:!0,set:(s)=>e[r]=()=>s})};var wt={};lt(wt,{parseFunctionArgs:()=>z,fetchPromptScorer:()=>P,TracerConfigurationBuilder:()=>I,TracerConfiguration:()=>N,Tracer:()=>h,TracePromptScorer:()=>G,TraceEvaluationRun:()=>B,RemoteScorer:()=>p,PromptScorer:()=>D,OpenTelemetryKeys:()=>c,OPENAI_API_KEY:()=>Et,NodeTracer:()=>A,NoOpSpanExporter:()=>M,Logger:()=>i,LocalScorer:()=>g,JudgmentSpanExporter:()=>S,JudgmentClient:()=>V,JudgmentAPIError:()=>T,JUDGMENT_ORG_ID:()=>m,JUDGMENT_NO_COLOR:()=>dt,JUDGMENT_LOG_LEVEL:()=>$,JUDGMENT_LLM_PROXY_URL:()=>ut,JUDGMENT_ENABLE_MONITORING:()=>mt,JUDGMENT_ENABLE_EVALUATIONS:()=>pt,JUDGMENT_DEFAULT_GPT_MODEL:()=>U,JUDGMENT_API_URL:()=>_,JUDGMENT_API_KEY:()=>u,InstructionAdherenceScorer:()=>Y,GOOGLE_API_KEY:()=>_t,GEMINI_API_KEY:()=>Tt,FaithfulnessScorer:()=>F,ExampleScorer:()=>W,ExampleParams:()=>b,ExampleEvaluationRun:()=>O,Example:()=>ct,EvaluationRun:()=>v,BrowserTracer:()=>w,BasePromptScorer:()=>f,AnswerRelevancyScorer:()=>j,AnswerCorrectnessScorer:()=>k,ANTHROPIC_API_KEY:()=>ht});module.exports=at(wt);function H(t){return{score_type:"Custom",name:t.name,class_name:t.constructor.name,threshold:t.threshold,strict_mode:t.strictMode,model:t.model,score:t.score,score_breakdown:null,reason:t.reason,using_native_model:null,success:t.success,model_client:null,error:t.error,additional_metadata:t.metadata,user:null,server_hosted:!1}}function y(t){return{score_type:t.scoreType,name:t.name,threshold:t.threshold,model:t.model,strict_mode:t.strictMode,required_params:Array.from(t.requiredParams),kwargs:t.kwargs}}class g{name;threshold;strictMode;model;score=null;reason=null;error=null;success=!1;metadata=null;constructor(t){this.name=t.name,this.strictMode=t.strictMode??!1,this.threshold=this.strictMode?1:t.threshold??0.5,this.model=t.model??null}successCheck(){if(this.error!==null)return!1;if(this.score===null)return!1;return this.score>=this.threshold}}class p{scoreType;name;threshold;strictMode;model;requiredParams;kwargs;constructor(t){this.scoreType=t.scoreType,this.name=t.name??t.scoreType,this.strictMode=t.strictMode??!1,this.threshold=this.strictMode?1:t.threshold??0.5,this.model=t.model??null,this.requiredParams=Object.freeze(t.requiredParams??[]),this.kwargs=t.kwargs??{}}}class v{id;created_at;local_scorers=[];remote_scorers=[];model;constructor(t){let{scorers:e=[],model:r}=t;this.id=crypto.randomUUID(),this.created_at=new Date().toISOString(),this.model=r??null;for(let s of e)if(s instanceof g)this.local_scorers.push(s);else if(s instanceof p)this.remote_scorers.push(s)}toBaseModel(){return{id:this.id,created_at:this.created_at,custom_scorers:this.local_scorers.length>0?this.local_scorers.map(H):void 0,judgment_scorers:this.remote_scorers.length>0?this.remote_scorers.map(y):void 0,model:this.model}}}class O extends v{project_name;eval_name;examples;trace_span_id;trace_id;constructor(t){let{examples:e,project_name:r,eval_name:s,trace_span_id:o,trace_id:n,...a}=t;super(a);this.project_name=r,this.eval_name=s,this.examples=e,this.trace_span_id=o??null,this.trace_id=n??null}toModel(){return{...this.toBaseModel(),project_name:this.project_name,eval_name:this.eval_name,examples:this.examples,trace_span_id:this.trace_span_id,trace_id:this.trace_id}}}class B extends v{project_name;eval_name;trace_and_span_ids;is_offline;constructor(t){let{trace_and_span_ids:e,project_name:r,eval_name:s,is_offline:o,...n}=t;super(n);this.project_name=r,this.eval_name=s,this.trace_and_span_ids=e,this.is_offline=o??!1}toModel(){return{...this.toBaseModel(),project_name:this.project_name,eval_name:this.eval_name,trace_and_span_ids:this.trace_and_span_ids,is_offline:this.is_offline}}}function ct(t){return{example_id:void 0,created_at:new Date().toISOString(),name:null,...t}}var b;((d)=>{d.INPUT="input";d.ACTUAL_OUTPUT="actual_output";d.EXPECTED_OUTPUT="expected_output";d.CONTEXT="context";d.RETRIEVAL_CONTEXT="retrieval_context";d.TOOLS_CALLED="tools_called";d.EXPECTED_TOOLS="expected_tools";d.ADDITIONAL_METADATA="additional_metadata"})(b||={});function E(t,e){let r=process.env[t];if(!r)return e??null;return r}var u=E("JUDGMENT_API_KEY"),m=E("JUDGMENT_ORG_ID"),_=E("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),ut=E("JUDGMENT_LLM_PROXY_URL","https://api.judgmentlabs.ai/llm/proxy/v1"),U=E("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),mt=E("JUDGMENT_ENABLE_MONITORING","true"),pt=E("JUDGMENT_ENABLE_EVALUATIONS","true"),dt=E("JUDGMENT_NO_COLOR"),$=E("JUDGMENT_LOG_LEVEL","warn"),Et=E("OPENAI_API_KEY"),ht=E("ANTHROPIC_API_KEY"),_t=E("GOOGLE_API_KEY"),Tt=E("GEMINI_API_KEY");class f extends p{prompt;model;options;description;judgmentApiKey;organizationId;constructor(t,e,r,s,o,n,a,l=u??"",d=m??""){super({scoreType:t,name:e,threshold:s,model:o,requiredParams:[],kwargs:{prompt:r,...n?{options:n}:{},...a?{description:a}:{}}});this.prompt=r,this.model=o,this.options=n,this.description=a,this.judgmentApiKey=l,this.organizationId=d}getThreshold(){return this.threshold}getPrompt(){return this.prompt}getOptions(){return this.options?{...this.options}:null}getModel(){return this.model}getDescription(){return this.description}getName(){return this.name}getConfig(){return{name:this.name,prompt:this.prompt,threshold:this.threshold,model:this.model,options:this.options,description:this.description}}toString(){return`${this.constructor.name}(name=${this.name}, prompt=${this.prompt}, threshold=${this.threshold}, model=${this.model}, options=${JSON.stringify(this.options)}, description=${this.description})`}}class R{baseUrl;apiKey;organizationId;constructor(t,e,r){this.baseUrl=t,this.apiKey=e,this.organizationId=r}buildUrl(t){return this.baseUrl+t}buildHeaders(){if(!this.apiKey||!this.organizationId)throw Error("API key and organization ID cannot be null");return{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId}}async addToRunEvalQueueExamples(t){let e=this.buildUrl("/add_to_run_eval_queue/examples"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async addToRunEvalQueueTraces(t){let e=this.buildUrl("/add_to_run_eval_queue/traces"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async logEvalResults(t){let e=this.buildUrl("/log_eval_results/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchExperimentRun(t){let e=this.buildUrl("/fetch_experiment_run/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async scorerExists(t){let e=this.buildUrl("/scorer_exists/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async saveScorer(t){let e=this.buildUrl("/save_scorer/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchScorers(t){let e=this.buildUrl("/fetch_scorers/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async projectsResolve(t){let e=this.buildUrl("/projects/resolve/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}}class T extends Error{statusCode;constructor(t,e){super(e);this.statusCode=t;this.name="JudgmentAPIError"}}async function P(t,e=u??"",r=m??""){if(!_||!e||!r)throw Error("Missing required API credentials");let o=await new R(_,e,r).fetchScorers({names:[t]});if(o.scorers.length===0)throw new T(404,`Scorer with name ${t} not found`);return o.scorers[0]}class D extends f{constructor(t,e,r,s,o,n,a=u??"",l=m??""){super("Prompt Scorer",t,e,r,s,o,n,a,l)}getScoreType(){return"Prompt Scorer"}getIsTrace(){return!1}static async get(t,e=u??"",r=m??""){let s=await P(t,e,r);if(s.is_trace===!0)throw new T(400,`Scorer with name ${t} is a TracePromptScorer, not a PromptScorer`);return new D(s.name,s.prompt,s.threshold,s.model??null,s.options,s.description,e,r)}}class G extends f{constructor(t,e,r,s,o,n,a=u??"",l=m??""){super("Trace Prompt Scorer",t,e,r,s,o,n,a,l)}getScoreType(){return"Trace Prompt Scorer"}getIsTrace(){return!0}static async get(t,e=u??"",r=m??""){let s=await P(t,e,r);if(s.is_trace!==!0)throw new T(400,`Scorer with name ${t} is a PromptScorer, not a TracePromptScorer`);return new G(s.name,s.prompt,s.threshold,s.model??null,s.options,s.description,e,r)}}class k extends p{constructor(t={}){super({scoreType:"Answer Correctness",...t,requiredParams:["input","actual_output","expected_output"]})}static get(t={}){return new k(t)}}class j extends p{constructor(t={}){super({scoreType:"Answer Relevancy",...t,requiredParams:["input","actual_output"]})}static get(t={}){return new j(t)}}class F extends p{constructor(t={}){super({scoreType:"Faithfulness",...t,requiredParams:["input","actual_output","retrieval_context"]})}static get(t={}){return new F(t)}}class Y extends p{constructor(t={}){super({scoreType:"Instruction Adherence",...t,requiredParams:["input","actual_output"]})}static get(t={}){return new Y(t)}}class W extends g{static get(t){return new this({name:t.name,threshold:t.threshold,strictMode:t.strictMode,model:t.model})}}var X=require("@opentelemetry/exporter-trace-otlp-http");class i{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=i.Level.WARNING;static useColor=!0;static initialize(){if(!i.initialized){let t=process.env.JUDGMENT_NO_COLOR;i.useColor=!t&&process.stdout.isTTY;let e=$.toLowerCase();if(e){let r={debug:i.Level.DEBUG,info:i.Level.INFO,warning:i.Level.WARNING,warn:i.Level.WARNING,error:i.Level.ERROR,critical:i.Level.CRITICAL};i.currentLevel=r[e]??i.Level.WARNING}i.initialized=!0}}static setLevel(t){i.currentLevel=t}static setUseColor(t){i.useColor=t}static log(t,e){if(i.initialize(),t<i.currentLevel)return;let r=new Date().toISOString().replace("T"," ").substring(0,19),s=Object.keys(i.Level).find((a)=>i.Level[a]===t)??"UNKNOWN",o=`${r} - judgeval - ${s} - ${e}`;if(i.useColor)o=`${t===i.Level.DEBUG||t===i.Level.INFO?i.GRAY:t===i.Level.WARNING?i.YELLOW:i.RED}${o}${i.RESET}`;(t>=i.Level.ERROR?process.stderr:process.stdout).write(o+`
2
- `)}static debug(t){i.log(i.Level.DEBUG,t)}static info(t){i.log(i.Level.INFO,t)}static warning(t){i.log(i.Level.WARNING,t)}static warn(t){i.log(i.Level.WARNING,t)}static error(t){i.log(i.Level.ERROR,t)}static critical(t){i.log(i.Level.CRITICAL,t)}}class S{delegate;projectId;constructor(t,e,r,s){if(!s||s.trim()==="")throw Error("projectId is required for JudgmentSpanExporter");this.projectId=s,this.delegate=new X.OTLPTraceExporter({url:t,headers:{Authorization:`Bearer ${e}`,"X-Organization-Id":r,"X-Project-Id":s}})}static builder(){return new Q}export(t,e){i.info(`JudgmentSpanExporter: Exported ${t.length} spans`),this.delegate.export(t,e)}shutdown(){return i.info(`JudgmentSpanExporter: Shutting down exporter for project ${this.projectId}`),this.delegate.shutdown()}forceFlush(){return i.info(`JudgmentSpanExporter: Force flushing spans for project ${this.projectId}`),this.delegate.forceFlush?.()??Promise.resolve()}}class Q{_endpoint;_apiKey;_organizationId;_projectId;constructor(){}endpoint(t){return this._endpoint=t,this}apiKey(t){return this._apiKey=t,this}organizationId(t){return this._organizationId=t,this}projectId(t){return this._projectId=t,this}build(){if(!this._endpoint||this._endpoint.trim()==="")throw Error("Endpoint is required");if(!this._apiKey||this._apiKey.trim()==="")throw Error("API key is required");if(!this._organizationId||this._organizationId.trim()==="")throw Error("Organization ID is required");if(!this._projectId||this._projectId.trim()==="")throw Error("Project ID is required");return new S(this._endpoint,this._apiKey,this._organizationId,this._projectId)}}class M{export(t,e){e({code:0})}flush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}class c{static AttributeKeys={JUDGMENT_SPAN_KIND:"judgment.span_kind",JUDGMENT_INPUT:"judgment.input",JUDGMENT_OUTPUT:"judgment.output",JUDGMENT_OFFLINE_MODE:"judgment.offline_mode",JUDGMENT_UPDATE_ID:"judgment.update_id",JUDGMENT_CUSTOMER_ID:"judgment.customer_id",JUDGMENT_AGENT_ID:"judgment.agent_id",JUDGMENT_PARENT_AGENT_ID:"judgment.parent_agent_id",JUDGMENT_AGENT_CLASS_NAME:"judgment.agent_class_name",JUDGMENT_AGENT_INSTANCE_NAME:"judgment.agent_instance_name",PENDING_TRACE_EVAL:"judgment.pending_trace_eval",GEN_AI_PROMPT:"gen_ai.prompt",GEN_AI_COMPLETION:"gen_ai.completion",GEN_AI_REQUEST_MODEL:"gen_ai.request.model",GEN_AI_RESPONSE_MODEL:"gen_ai.response.model",GEN_AI_SYSTEM:"gen_ai.system",GEN_AI_USAGE_INPUT_TOKENS:"gen_ai.usage.input_tokens",GEN_AI_USAGE_OUTPUT_TOKENS:"gen_ai.usage.output_tokens",GEN_AI_USAGE_COMPLETION_TOKENS:"gen_ai.usage.completion_tokens",GEN_AI_REQUEST_TEMPERATURE:"gen_ai.request.temperature",GEN_AI_REQUEST_MAX_TOKENS:"gen_ai.request.max_tokens",GEN_AI_RESPONSE_FINISH_REASONS:"gen_ai.response.finish_reasons",GEN_AI_USAGE_TOTAL_COST:"gen_ai.usage.total_cost_usd"};static InternalAttributeKeys={DISABLE_PARTIAL_EMIT:"disable_partial_emit",CANCELLED:"cancelled"};static ResourceKeys={SERVICE_NAME:"service.name",TELEMETRY_SDK_LANGUAGE:"telemetry.sdk.language",TELEMETRY_SDK_NAME:"telemetry.sdk.name",TELEMETRY_SDK_VERSION:"telemetry.sdk.version",JUDGMENT_PROJECT_ID:"judgment.project_id"}}var x=require("@opentelemetry/api");var ft=/^([^(]+?)=>/,Rt=/^[^(]*\(\s*([^)]*)\)/m,xt=/,/,Nt=/^\s*(_?)(\S+?)\1\s*$/,gt=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function bt(t){return Function.prototype.toString.call(t)}function Pt(t){let e=bt(t).replace(gt,"");return e.match(ft)||e.match(Rt)}function z(t){let e=Pt(t);if(!e||!e[1])return[];return e[1].split(xt).map((r)=>{return r.replace(Nt,(o,n,a)=>a).trim()}).filter((r)=>r.length>0)}class h{static instances=new Map;apiClient;tracer;serializer=JSON.stringify;_initialized=!1;projectId=null;spanExporter=null;configuration;getConfiguration(){return this.configuration}getProjectId(){return this.projectId}getSerializer(){return this.serializer}constructor(t){this.configuration=t,this.tracer=x.trace.getTracer(this.configuration.tracerName),this.apiClient=new R(this.configuration.apiUrl,this.configuration.apiKey,this.configuration.organizationId),this._initialized=!1}async resolveProjectId(){try{i.info(`Resolving project ID for project: ${this.configuration.projectName}`);let t=await this.apiClient.projectsResolve({project_name:this.configuration.projectName});i.info(`Resolved project ID: ${t.project_id}`);let e=t.project_id;return this.projectId=e,i.info(`Successfully resolved project ID: ${this.projectId}`),this.projectId}catch(t){throw Error(`Failed to resolve project ID: ${t instanceof Error?t.message:String(t)}`)}}async getSpanExporter(){if(!this.spanExporter)try{let t=await this.resolveProjectId();this.spanExporter=this.createJudgmentSpanExporter(t)}catch{i.error("Failed to resolve project "+this.configuration.projectName+", please create it first at https://app.judgmentlabs.ai/org/"+(this.configuration.organizationId||"unknown")+"/projects. Skipping Judgment export."),this.spanExporter=new M}return this.spanExporter}setSpanKind(t){let e=x.trace.getActiveSpan();if(!e){i.info("No active span found, skipping setSpanKind");return}e.setAttribute(c.AttributeKeys.JUDGMENT_SPAN_KIND,t)}setAttribute(t,e){let r=x.trace.getActiveSpan();if(!r){i.info("No active span found, skipping setAttribute");return}r.setAttribute(t,this.serializer(e))}setLLMSpan(){this.setSpanKind("llm")}setToolSpan(){this.setSpanKind("tool")}setGeneralSpan(){this.setSpanKind("span")}setAttributes(t){let e=x.trace.getActiveSpan();if(!e){i.info("No active span found, skipping setAttributes");return}for(let[r,s]of Object.entries(t))e.setAttribute(r,this.serializer(s))}setInput(t){this.setAttribute(c.AttributeKeys.JUDGMENT_INPUT,t)}setOutput(t){this.setAttribute(c.AttributeKeys.JUDGMENT_OUTPUT,t)}asyncEvaluate(t,e,r){try{if(!this.configuration.enableEvaluation)return;let s=x.trace.getActiveSpan();if(!s){i.info("No active span found, skipping asyncEvaluate");return}if(!s.isRecording()){i.info("Active span is not recording, skipping asyncEvaluate");return}let o=s.spanContext(),n=o.traceId,a=o.spanId;i.info(`asyncEvaluate: project=${this.configuration.projectName}, traceId=${n}, spanId=${a}, scorer=${t.name}`);let l=this.createEvaluationRun(t,e,r,n,a);this.enqueueEvaluation(l)}catch(s){i.error(`Failed to asyncEvaluate: ${s instanceof Error?s.message:String(s)}`)}}asyncTraceEvaluate(t,e){try{if(!this.configuration.enableEvaluation)return;let r=x.trace.getActiveSpan();if(!r){i.info("No active span found, skipping asyncTraceEvaluate");return}if(!r.isRecording()){i.info("Active span is not recording, skipping asyncTraceEvaluate");return}let s=r.spanContext(),o=s.traceId,n=s.spanId;i.info(`asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${o}, spanId=${n}, scorer=${t.name}`);let a=this.createTraceEvaluationRun(t,e,o,n),l=this.serializer(a);r.setAttribute(c.AttributeKeys.PENDING_TRACE_EVAL,l)}catch(r){i.error(`Failed to asyncTraceEvaluate: ${r instanceof Error?r.message:String(r)}`)}}createTraceEvaluationRun(t,e,r,s){let o=`async_trace_evaluate_${s||Date.now()}`,n=e??U,a=y(t);return{project_name:this.configuration.projectName,eval_name:o,judgment_scorers:[a],model:n,trace_and_span_ids:[[r,s]]}}createJudgmentSpanExporter(t){let e=this.configuration.apiUrl.endsWith("/")?`${this.configuration.apiUrl}otel/v1/traces`:`${this.configuration.apiUrl}/otel/v1/traces`;return S.builder().endpoint(e).apiKey(this.configuration.apiKey).organizationId(this.configuration.organizationId).projectId(t).build()}createEvaluationRun(t,e,r,s,o){let n=`async_evaluate_${o||Date.now()}`,a=r??U,l=y(t);return{project_name:this.configuration.projectName,eval_name:n,examples:[e],custom_scorers:[],judgment_scorers:[l],model:a,trace_id:s,trace_span_id:o}}async enqueueEvaluation(t){try{await this.apiClient.addToRunEvalQueueExamples(t),i.info(`Enqueuing evaluation run: ${t.eval_name}`)}catch(e){i.error(`Failed to enqueue evaluation run: ${e instanceof Error?e.message:String(e)}`)}}_observe(t,e="span"){return(...r)=>{let s=t.name||"anonymous";return this.tracer.startActiveSpan(s,(o)=>{try{o.setAttribute(c.AttributeKeys.JUDGMENT_SPAN_KIND,e);try{let a=z(t);if(a.length===r.length){let l={};a.forEach((d,st)=>{l[d]=r[st]}),o.setAttribute(c.AttributeKeys.JUDGMENT_INPUT,this.serializer(l))}}catch(a){i.warn(`Failed to parse function args: ${a instanceof Error?a.message:String(a)}`)}let n=t(...r);if(n instanceof Promise)return n.then((a)=>{return o.setAttribute(c.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(a)),a}).catch((a)=>{throw o.recordException(a instanceof Error?a:Error(String(a))),a}).finally(()=>{o.end()});return o.setAttribute(c.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(n)),o.end(),n}catch(n){throw o.recordException(n),o.end(),n}})}}observe(t,e){try{if(typeof t==="function"){let r=this._observe(t,e??"span");return Object.defineProperty(r,"name",{value:t.name}),r}return(r,s,o)=>{try{if(!o)return;let n=o.value,a=this._observe(n,t??"span");return Object.defineProperty(a,"name",{value:n.name}),o.value=a,o}catch(n){i.error(`Failed to wrap method with observe: ${n instanceof Error?n.message:String(n)}`)}}}catch(r){if(i.error(`Failed to observe function: ${r instanceof Error?r.message:String(r)}`),typeof t==="function")return t;return()=>{}}}async shutdown(){}}var K="opentelemetry.instrumentation.judgeval";class N{projectName;apiKey;organizationId;apiUrl;enableEvaluation;tracerName;resourceAttributes;initialize;constructor(t,e,r,s,o,n=K,a={},l=!0){this.projectName=t;this.apiKey=e;this.organizationId=r;this.apiUrl=s;this.enableEvaluation=o;this.tracerName=n;this.resourceAttributes=a;this.initialize=l}static createDefault(t){return new I().projectName(t).build()}static builder(){return new I}}class I{_projectName;_apiKey=u;_organizationId=m;_apiUrl=_;_enableEvaluation=!0;_tracerName=K;_resourceAttributes={};_initialize=!0;projectName(t){return this._projectName=t,this}apiKey(t){return this._apiKey=t,this}organizationId(t){return this._organizationId=t,this}apiUrl(t){return this._apiUrl=t,this}enableEvaluation(t){return this._enableEvaluation=t,this}tracerName(t){return this._tracerName=t,this}resourceAttributes(t){return this._resourceAttributes=t,this}initialize(t){return this._initialize=t,this}build(){if(!this._projectName)throw Error("Project name is required");if(!this._apiKey)throw Error("API key is required");if(!this._organizationId)throw Error("Organization ID is required");if(!this._apiUrl)throw Error("API URL is required");return new N(this._projectName,this._apiKey,this._organizationId,this._apiUrl,this._enableEvaluation,this._tracerName,this._resourceAttributes,this._initialize)}}class V{apiClient;constructor(t=u,e=m){if(t===null||e===null)throw Error("API key and organization ID are required");this.apiClient=new R(_,t,e)}async runEvaluation(t,e,r,s,o){if(t.length===0)throw Error("No examples provided");let n=new O({project_name:r,eval_name:s,examples:t,scorers:e,model:o}),a=Boolean(n.local_scorers.length),l=Boolean(n.remote_scorers.length);if(a&&l)throw Error("Cannot run both local and remote scorers at the same time");if(l)return this.runRemoteScorers(n);return this.runLocalScorers(n)}async runRemoteScorers(t){console.log("Running evaluation..."),await this.apiClient.addToRunEvalQueueExamples(t.toModel());let e=await this.pollForResults(t.project_name,t.id,t.examples.length);return console.log(`View results at: ${e.ui_results_url}/example`),e.results}async runLocalScorers(t){console.log("Running local evaluation...");let e=await this.executeLocalScorers(t),r=await this.apiClient.logEvalResults({results:e,run:t.toModel()});return console.log(`View results at: ${r.ui_results_url}/example`),e}async executeLocalScorers(t){let e=[];for(let r of t.examples){let s=[];for(let o of t.local_scorers){try{o.score=await o.scoreExample(r),o.success=o.successCheck()}catch(n){o.error=n instanceof Error?n.message:String(n),o.score=null,o.success=!1}s.push({name:o.name,threshold:o.threshold,success:o.success,score:o.score,reason:o.reason,strict_mode:o.strictMode,evaluation_model:o.model,error:o.error,additional_metadata:o.metadata})}e.push({success:s.every((o)=>o.success),scorers_data:s,data_object:r})}return e}async pollForResults(t,e,r){for(let s=0;s<60;s++){let o=await this.apiClient.fetchExperimentRun({experiment_run_id:e,project_name:t});if(o.results.length===r)return o;await new Promise((n)=>setTimeout(n,5000))}throw Error("Evaluation timed out")}}var tt=require("@opentelemetry/resources"),J=require("@opentelemetry/sdk-trace-web");var Z="0.5.0";var C=Z;class w extends h{webTracerProvider;async initialize(t={}){if(this._initialized)return this;try{let e={[c.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[c.ResourceKeys.TELEMETRY_SDK_VERSION]:C,...this.configuration.resourceAttributes,...t.resourceAttributes},r=await this.getSpanExporter();return this.webTracerProvider=new J.WebTracerProvider({resource:tt.resourceFromAttributes(e),spanProcessors:[new J.BatchSpanProcessor(r)],...t}),this.webTracerProvider.register(),this._initialized=!0,this}catch(e){throw Error(`Failed to initialize browser tracer: ${e instanceof Error?e.message:String(e)}`)}}static getInstance(t){let e=`BrowserTracer:${t.projectName}`;if(!h.instances.has(e))h.instances.set(e,new w(t));return h.instances.get(e)}static async createDefault(t){let e=N.builder().projectName(t).build(),r=new w(e);if(e.initialize)await r.initialize();return r}static async createWithConfiguration(t){let e=new w(t);if(t.initialize)await e.initialize();return e}}var et=require("@opentelemetry/resources"),rt=require("@opentelemetry/sdk-node");class A extends h{nodeSDK;async initialize(t={}){if(this._initialized)return this;try{let e={[c.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[c.ResourceKeys.TELEMETRY_SDK_VERSION]:C,...this.configuration.resourceAttributes,...t.resourceAttributes},r=await this.getSpanExporter();return this.nodeSDK=new rt.NodeSDK({resource:et.resourceFromAttributes(e),instrumentations:t.instrumentations,traceExporter:r,...t}),this.nodeSDK.start(),this._initialized=!0,this}catch(e){throw Error(`Failed to initialize node tracer: ${e instanceof Error?e.message:String(e)}`)}}static getInstance(t){let e=`NodeTracer:${t.projectName}`;if(!h.instances.has(e))h.instances.set(e,new A(t));return h.instances.get(e)}static async createDefault(t){let e=N.builder().projectName(t).enableEvaluation(!0).build(),r=new A(e);if(e.initialize)await r.initialize();return r}static async createWithConfiguration(t){let e=new A(t);if(t.initialize)await e.initialize();return e}async shutdown(){if(!this.nodeSDK){i.warn("Node SDK not initialized, skipping shutdown");return}await this.nodeSDK.shutdown()}}
1
+ var{defineProperty:L,getOwnPropertyNames:te,getOwnPropertyDescriptor:re}=Object,se=Object.prototype.hasOwnProperty;var $=new WeakMap,oe=(e)=>{var t=$.get(e),r;if(t)return t;if(t=L({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")te(e).map((o)=>!se.call(t,o)&&L(t,o,{get:()=>e[o],enumerable:!(r=re(e,o))||r.enumerable}));return $.set(e,t),t};var ie=(e,t)=>{for(var r in t)L(e,r,{get:t[r],enumerable:!0,configurable:!0,set:(o)=>t[r]=()=>o})};var le={};ie(le,{ScoringResult:()=>F,ScorersFactory:()=>I,ScorerData:()=>j,PromptScorerFactory:()=>h,PromptScorer:()=>v,NodeTracerFactory:()=>b,NodeTracer:()=>M,NoOpSpanExporter:()=>N,JudgmentSpanExporter:()=>P,Judgeval:()=>J,FaithfulnessScorer:()=>T,Example:()=>A,EvaluationFactory:()=>C,Evaluation:()=>w,CustomScorerFactory:()=>O,CustomScorer:()=>y,BuiltInScorersFactory:()=>f,BrowserTracerFactory:()=>x,BrowserTracer:()=>R,BaseTracer:()=>m,BaseScorer:()=>_,AnswerRelevancyScorer:()=>S,AnswerCorrectnessScorer:()=>E,APIScorer:()=>d});module.exports=oe(le);function l(e,t){let r=process.env[e];if(!r)return t??null;return r}var H=l("JUDGMENT_API_KEY"),q=l("JUDGMENT_ORG_ID"),Y=l("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),ce=l("JUDGMENT_LLM_PROXY_URL","https://api.judgmentlabs.ai/llm/proxy/v1"),z=l("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),ue=l("JUDGMENT_ENABLE_MONITORING","true"),pe=l("JUDGMENT_ENABLE_EVALUATIONS","true"),me=l("JUDGMENT_NO_COLOR"),B=l("JUDGMENT_LOG_LEVEL","warn"),he=l("OPENAI_API_KEY"),_e=l("ANTHROPIC_API_KEY"),Ee=l("GOOGLE_API_KEY"),Se=l("GEMINI_API_KEY");class k{baseUrl;apiKey;organizationId;constructor(e,t,r){this.baseUrl=e,this.apiKey=t,this.organizationId=r}getBaseUrl(){return this.baseUrl}getApiKey(){return this.apiKey}getOrganizationId(){return this.organizationId}buildUrl(e){return this.baseUrl+e}buildHeaders(){if(!this.apiKey||!this.organizationId)throw Error("API key and organization ID cannot be null");return{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId}}async addToRunEvalQueueExamples(e){let t=this.buildUrl("/add_to_run_eval_queue/examples"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async addToRunEvalQueueTraces(e){let t=this.buildUrl("/add_to_run_eval_queue/traces"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async logEvalResults(e){let t=this.buildUrl("/log_eval_results/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchExperimentRun(e){let t=this.buildUrl("/fetch_experiment_run/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async scorerExists(e){let t=this.buildUrl("/scorer_exists/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async saveScorer(e){let t=this.buildUrl("/save_scorer/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchScorers(e){let t=this.buildUrl("/fetch_scorers/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async projectsResolve(e){let t=this.buildUrl("/projects/resolve/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}}class w{client;constructor(e){this.client=e.client}}class C{client;constructor(e){this.client=e}create(e={}){return new w({...e,client:this.client})}}var c={PROMPT_SCORER:"Prompt Scorer",TRACE_PROMPT_SCORER:"Trace Prompt Scorer",FAITHFULNESS:"Faithfulness",ANSWER_RELEVANCY:"Answer Relevancy",ANSWER_CORRECTNESS:"Answer Correctness",CUSTOM:"Custom"};class _{}class d extends _{scoreType;requiredParams;_threshold;_name;_strictMode;_model;additionalProperties;constructor(e){super();this.scoreType=e,this._name=e,this._threshold=0.5,this._strictMode=!1,this.requiredParams=[],this.additionalProperties={}}getName(){return this._name}getScoreType(){return this.scoreType}getThreshold(){return this._threshold}getStrictMode(){return this._strictMode}getModel(){return this._model}getRequiredParams(){return[...this.requiredParams]}setThreshold(e){if(e<0||e>1)throw Error(`Threshold must be between 0 and 1, got: ${e}`);if(this._threshold=e,this._strictMode)this._threshold=1}setName(e){this._name=e}setStrictMode(e){if(this._strictMode=e,e)this._threshold=1}setModel(e){this._model=e}setRequiredParams(e){this.requiredParams=[...e]}setAdditionalProperty(e,t){this.additionalProperties[e]=t}getAdditionalProperties(){return{...this.additionalProperties}}getScorerConfig(){let e={...this.additionalProperties};return{score_type:this.scoreType,threshold:this._threshold,name:this._name,strict_mode:this._strictMode,required_params:this.requiredParams,kwargs:e}}static builder(e){return new W(this,e)}}class W{scorer;constructor(e,t){this.scorer=new e(t)}threshold(e){return this.scorer.setThreshold(e),this}name(e){return this.scorer.setName(e),this}strictMode(e){return this.scorer.setStrictMode(e),this}requiredParams(e){return this.scorer.setRequiredParams(e),this}model(e){return this.scorer.setModel(e),this}additionalProperty(e,t){return this.scorer.setAdditionalProperty(e,t),this}build(){return this.scorer}}class E extends d{constructor(e={}){super(c.ANSWER_CORRECTNESS);if(this.setRequiredParams(["input","actual_output","expected_output"]),e.threshold!==void 0)this.setThreshold(e.threshold);if(e.name)this.setName(e.name);if(e.strictMode!==void 0)this.setStrictMode(e.strictMode);if(e.model)this.setModel(e.model)}}class S extends d{constructor(e={}){super(c.ANSWER_RELEVANCY);if(this.setRequiredParams(["input","actual_output"]),e.threshold!==void 0)this.setThreshold(e.threshold);if(e.name)this.setName(e.name);if(e.strictMode!==void 0)this.setStrictMode(e.strictMode);if(e.model)this.setModel(e.model)}}class T extends d{constructor(e={}){super(c.FAITHFULNESS);if(this.setRequiredParams(["context","actual_output"]),e.threshold!==void 0)this.setThreshold(e.threshold);if(e.name)this.setName(e.name);if(e.strictMode!==void 0)this.setStrictMode(e.strictMode);if(e.model)this.setModel(e.model)}}class f{answerCorrectness(e={}){return new E(e)}answerRelevancy(e={}){return new S(e)}faithfulness(e={}){return new T(e)}}class y extends d{_className;_serverHosted;constructor(e){super(c.CUSTOM);if(this.setName(e.name),e.className)this._className=e.className,this.setAdditionalProperty("class_name",e.className);this._serverHosted=e.serverHosted??!0,this.setAdditionalProperty("server_hosted",this._serverHosted)}getClassName(){return this._className}isServerHosted(){return this._serverHosted}getScorerConfig(){throw Error("CustomScorer does not use ScorerConfig")}}class O{get(e,t){return new y({name:e,className:t??e,serverHosted:!0})}}class v extends _{_name;_prompt;_threshold;_options;_model;_description;isTrace;constructor(e){super();this._name=e.name,this._prompt=e.prompt,this._threshold=e.threshold,this._options={...e.options},this._model=e.model,this._description=e.description,this.isTrace=e.isTrace??!1}getName(){return this._name}getPrompt(){return this._prompt}getThreshold(){return this._threshold}getOptions(){return this._options?{...this._options}:void 0}getModel(){return this._model}getDescription(){return this._description}setThreshold(e){this._threshold=e}setPrompt(e){this._prompt=e}setModel(e){this._model=e}setOptions(e){this._options={...e}}setDescription(e){this._description=e}appendToPrompt(e){this._prompt=this._prompt+e}getScorerConfig(){let e=this.isTrace?c.TRACE_PROMPT_SCORER:c.PROMPT_SCORER,t={prompt:this._prompt};if(this._options)t.options=this._options;if(this._model)t.model=this._model;if(this._description)t.description=this._description;return{score_type:e,threshold:this._threshold,name:this._name,kwargs:t}}}class h{client;isTrace;static cache=new Map;constructor(e,t){this.client=e,this.isTrace=t}async get(e){let t=this.getCacheKey(e),r=h.cache.get(t);if(r)return this.createFromModel(r,e);try{let o={names:[e]},i=await this.client.fetchScorers(o);if(i.scorers.length===0)throw Error(`Failed to fetch prompt scorer '${e}': not found`);let a=i.scorers[0],n=a.is_trace===!0;if(n!==this.isTrace){let p=this.isTrace?"TracePromptScorer":"PromptScorer";throw Error(`Scorer with name ${e} is a ${n?"TracePromptScorer":"PromptScorer"}, not a ${p}`)}return h.cache.set(t,a),this.createFromModel(a,e)}catch(o){if(o instanceof Error)throw o;throw Error(`Failed to fetch prompt scorer '${e}': ${o}`)}}create(e){if(!e.name)throw Error("Name is required");if(!e.prompt)throw Error("Prompt is required");return new v({...e,isTrace:this.isTrace})}createFromModel(e,t){let r;if(e.options&&typeof e.options==="object"){r={};for(let[o,i]of Object.entries(e.options))if(typeof i==="number")r[o]=i}return new v({name:t,prompt:e.prompt,threshold:e.threshold,options:r??{},model:e.model??z,description:e.description??"",isTrace:this.isTrace})}getCacheKey(e){return`${e}:${this.client.getApiKey()}:${this.client.getOrganizationId()}`}}class I{client;constructor(e){this.client=e}get promptScorer(){return new h(this.client,!1)}get tracePromptScorer(){return new h(this.client,!0)}get customScorer(){return new O}get builtIn(){return new f}}var X=require("@opentelemetry/resources"),G=require("@opentelemetry/sdk-trace-web");class s{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=s.Level.WARNING;static useColor=!0;static initialize(){if(!s.initialized){let e=process.env.JUDGMENT_NO_COLOR;s.useColor=!e&&process.stdout.isTTY;let t=B.toLowerCase();if(t){let r={debug:s.Level.DEBUG,info:s.Level.INFO,warning:s.Level.WARNING,warn:s.Level.WARNING,error:s.Level.ERROR,critical:s.Level.CRITICAL};s.currentLevel=r[t]??s.Level.WARNING}s.initialized=!0}}static setLevel(e){s.currentLevel=e}static setUseColor(e){s.useColor=e}static log(e,t){if(s.initialize(),e<s.currentLevel)return;let r=new Date().toISOString().replace("T"," ").substring(0,19),o=Object.keys(s.Level).find((n)=>s.Level[n]===e)??"UNKNOWN",i=`${r} - judgeval - ${o} - ${t}`;if(s.useColor)i=`${e===s.Level.DEBUG||e===s.Level.INFO?s.GRAY:e===s.Level.WARNING?s.YELLOW:s.RED}${i}${s.RESET}`;(e>=s.Level.ERROR?process.stderr:process.stdout).write(i+`
2
+ `)}static debug(e){s.log(s.Level.DEBUG,e)}static info(e){s.log(s.Level.INFO,e)}static warning(e){s.log(s.Level.WARNING,e)}static warn(e){s.log(s.Level.WARNING,e)}static error(e){s.log(s.Level.ERROR,e)}static critical(e){s.log(s.Level.CRITICAL,e)}}var V="0.7.0";var U=V;var u=require("@opentelemetry/api");var Q=require("@opentelemetry/exporter-trace-otlp-http");class P{delegate;constructor(e,t,r,o){this.delegate=new Q.OTLPTraceExporter({url:e,headers:{Authorization:`Bearer ${t}`,"X-Organization-Id":r,"X-Project-Id":o}})}export(e,t){s.info(`JudgmentSpanExporter: exporting ${e.length} spans`),this.delegate.export(e,t)}shutdown(){return this.delegate.shutdown()}forceFlush(){return this.delegate.forceFlush?.()??Promise.resolve()}}class N{export(e,t){t({code:0})}shutdown(){return Promise.resolve()}}class m{static TRACER_NAME="judgeval";projectName;enableEvaluation;apiClient;serializer;jsonEncoder;projectId;constructor(e,t,r,o,i=JSON.stringify){this.projectName=e,this.enableEvaluation=t,this.apiClient=r,this.serializer=o,this.jsonEncoder=i,this.projectId=null}async resolveAndSetProjectId(){try{this.projectId=await this.resolveProjectId(this.projectName),s.info(`Successfully resolved project ID: ${this.projectId}`)}catch{s.error(`Failed to resolve project ${this.projectName}, please create it first at https://app.judgmentlabs.ai/org/${this.apiClient.getOrganizationId()}/projects. Skipping Judgment export.`),this.projectId=null}}getSpanExporter(){if(this.projectId!==null)return this.createJudgmentSpanExporter(this.projectId);return s.error("Project not resolved; cannot create exporter, returning NoOpSpanExporter"),new N}getTracer(){return u.trace.getTracer(m.TRACER_NAME)}setSpanKind(e){if(!e)return;let t=u.trace.getActiveSpan();if(t)t.setAttribute("judgment.span_kind",e)}setAttribute(e,t){if(!this.isValidKey(e))return;if(t===null||t===void 0)return;let r=u.trace.getActiveSpan();if(r){let o=typeof t==="string"||typeof t==="number"||typeof t==="boolean"?t:this.serializer(t);r.setAttribute(e,o)}}setAttributes(e){for(let[t,r]of Object.entries(e))this.setAttribute(t,r)}setLLMSpan(){this.setSpanKind("llm")}setToolSpan(){this.setSpanKind("tool")}setGeneralSpan(){this.setSpanKind("span")}setInput(e){this.setAttribute("judgment.input",e)}setOutput(e){this.setAttribute("judgment.output",e)}asyncEvaluate(e,t){this.safeExecute("evaluate scorer",()=>{if(!this.enableEvaluation)return;let r=this.getSampledSpanContext();if(!r)return;let{traceId:o,spanId:i}=r;this.logEvaluationInfo("asyncEvaluate",o,i,e.getName());let a=this.createEvaluationRun(e,t,o,i);this.enqueueEvaluation(a).catch((n)=>{s.error(`Failed to enqueue evaluation run: ${n}`)})})}asyncTraceEvaluate(e){this.safeExecute("evaluate trace scorer",()=>{if(!this.enableEvaluation)return;let t=this.getSampledSpan();if(!t)return;let r=t.spanContext(),o=r.traceId,i=r.spanId;this.logEvaluationInfo("asyncTraceEvaluate",o,i,e.getName());let a=this.createTraceEvaluationRun(e,o,i);try{let n=JSON.stringify(a);t.setAttribute("judgment.pending_trace_eval",n)}catch(n){s.error(`Failed to serialize trace evaluation: ${n}`)}})}span(e,t){return this.getTracer().startActiveSpan(e,(o)=>{try{return t()}catch(i){throw o.setStatus({code:u.SpanStatusCode.ERROR}),o.recordException(i),i}finally{o.end()}})}static startSpan(e){return u.trace.getTracer(m.TRACER_NAME).startSpan(e)}observe(e,t="span",r){let o=this.getTracer(),i=r??e.name;return(...a)=>{return o.startActiveSpan(i,(n)=>{if(t)n.setAttribute("judgment.span_kind",t);try{let p=this.formatInputs(e,a);n.setAttribute("judgment.input",this.serializer(p));let D=e(...a);if(D instanceof Promise)return D.then((g)=>{return n.setAttribute("judgment.output",this.serializer(g)),g}).catch((g)=>{throw n.recordException(g),n.setStatus({code:u.SpanStatusCode.ERROR,message:String(g)}),g}).finally(()=>{n.end()});return n.setAttribute("judgment.output",this.serializer(D)),n.end(),D}catch(p){throw n.recordException(p),n.setStatus({code:u.SpanStatusCode.ERROR,message:String(p)}),n.end(),p}})}}async resolveProjectId(e){try{s.info(`Resolving project ID for project: ${e}`);let t={project_name:e},o=(await this.apiClient.projectsResolve(t)).project_id;if(!o)throw Error(`Project ID not found for project: ${e}`);return s.info(`Resolved project ID: ${o}`),o}catch(t){throw Error(`Failed to resolve project ID: ${t instanceof Error?t.message:String(t)}`)}}buildEndpoint(e){return e.endsWith("/")?e+"otel/v1/traces":e+"/otel/v1/traces"}createJudgmentSpanExporter(e){return new P(this.buildEndpoint(this.apiClient.getBaseUrl()),this.apiClient.getApiKey(),this.apiClient.getOrganizationId(),e)}generateRunId(e,t){return e+(t??Date.now().toString())}createEvaluationRun(e,t,r,o){let i=this.generateRunId("async_evaluate_",o);return{project_name:this.projectName,eval_name:i,trace_id:r,trace_span_id:o,examples:[t.toModel()],judgment_scorers:[e.getScorerConfig()],custom_scorers:[]}}createTraceEvaluationRun(e,t,r){let o=this.generateRunId("async_trace_evaluate_",r);return{project_name:this.projectName,eval_name:o,trace_and_span_ids:[[t,r]],judgment_scorers:[e.getScorerConfig()],custom_scorers:[],is_offline:!1}}async enqueueEvaluation(e){try{await this.apiClient.addToRunEvalQueueExamples(e)}catch(t){s.error(`Failed to enqueue evaluation run: ${t}`)}}getSampledSpanContext(){let e=u.trace.getActiveSpan();if(!e)return null;let t=e.spanContext();if(!t.traceFlags||!(t.traceFlags&1))return null;return t}getSampledSpan(){let e=u.trace.getActiveSpan();if(!e)return null;let t=e.spanContext();if(!t.traceFlags||!(t.traceFlags&1))return null;return e}logEvaluationInfo(e,t,r,o){s.info(`${e}: project=${this.projectName}, traceId=${t}, spanId=${r}, scorer=${o}`)}safeExecute(e,t){try{t()}catch(r){s.error(`Failed to ${e}: ${r}`)}}isValidKey(e){return e.length>0}formatInputs(e,t){try{let r=e.toString(),o=/\(([^)]*)\)/.exec(r),i=o?o[1].split(",").map((n)=>n.trim().split("=")[0].trim()).filter((n)=>n.length>0):[],a={};return i.forEach((n,p)=>{if(p<t.length)a[n]=t[p]}),a}catch{return{}}}}class R extends m{webTracerProvider=null;resourceAttributes;constructor(e,t,r,o,i){super(e,t,r,o);this.resourceAttributes=i}static async create(e,t){let r=new R(e.projectName,e.enableEvaluation,t,e.serializer,e.resourceAttributes);if(await r.resolveAndSetProjectId(),e.initialize)await r.initialize();return r}async initialize(){if(this.webTracerProvider!==null){s.warn("BrowserTracer already initialized");return}try{let e={"service.name":this.projectName,"telemetry.sdk.version":U,...this.resourceAttributes},t=this.getSpanExporter();this.webTracerProvider=new G.WebTracerProvider({resource:X.resourceFromAttributes(e),spanProcessors:[new G.BatchSpanProcessor(t)]}),this.webTracerProvider.register(),s.info("BrowserTracer initialized successfully")}catch(e){throw Error(`Failed to initialize BrowserTracer: ${e instanceof Error?e.message:String(e)}`)}}async shutdown(){if(!this.webTracerProvider){s.warn("BrowserTracer not initialized, skipping shutdown");return}try{await this.webTracerProvider.shutdown(),this.webTracerProvider=null,s.info("BrowserTracer shut down successfully")}catch(e){s.error(`Failed to shutdown BrowserTracer: ${e}`)}}}class x{client;constructor(e){this.client=e}async create(e){if(!e.projectName)throw Error("Project name is required");return R.create({projectName:e.projectName,enableEvaluation:e.enableEvaluation??!0,enableMonitoring:e.enableMonitoring??!1,serializer:e.serializer??JSON.stringify,resourceAttributes:e.resourceAttributes??{},initialize:e.initialize??!0},this.client)}}var Z=require("@opentelemetry/resources"),K=require("@opentelemetry/sdk-node");class M extends m{nodeSDK=null;resourceAttributes;instrumentations;constructor(e,t,r,o,i,a){super(e,t,r,o);this.resourceAttributes=i,this.instrumentations=a}static async create(e,t){let r=new M(e.projectName,e.enableEvaluation,t,e.serializer,e.resourceAttributes,e.instrumentations);if(await r.resolveAndSetProjectId(),e.initialize)await r.initialize();return r}async initialize(){if(this.nodeSDK!==null){s.warn("NodeTracer already initialized");return}try{let e={"service.name":this.projectName,"telemetry.sdk.version":U,...this.resourceAttributes},t=this.getSpanExporter();this.nodeSDK=new K.NodeSDK({resource:Z.resourceFromAttributes(e),traceExporter:t,instrumentations:this.instrumentations}),this.nodeSDK.start(),s.info("NodeTracer initialized successfully")}catch(e){throw Error(`Failed to initialize NodeTracer: ${e instanceof Error?e.message:String(e)}`)}}async shutdown(){if(!this.nodeSDK){s.warn("NodeTracer not initialized, skipping shutdown");return}try{await this.nodeSDK.shutdown(),this.nodeSDK=null,s.info("NodeTracer shut down successfully")}catch(e){s.error(`Failed to shutdown NodeTracer: ${e}`)}}}class b{client;constructor(e){this.client=e}async create(e){if(!e.projectName)throw Error("Project name is required");return M.create({projectName:e.projectName,enableEvaluation:e.enableEvaluation??!0,enableMonitoring:e.enableMonitoring??!1,serializer:e.serializer??JSON.stringify,resourceAttributes:e.resourceAttributes??{},instrumentations:e.instrumentations??[],initialize:e.initialize??!0},this.client)}}class J{internalClient;constructor(e={}){let t=e.apiKey??H,r=e.organizationId??q,o=e.apiUrl??Y;if(!t)throw Error("API key is required");if(!r)throw Error("Organization ID is required");if(!o)throw Error("API URL is required");this.internalClient=new k(o,t,r)}static create(e={}){return new J(e)}get nodeTracer(){return new b(this.internalClient)}get browserTracer(){return new x(this.internalClient)}get scorers(){return new I(this.internalClient)}get evaluation(){return new C(this.internalClient)}}var ee=require("crypto");class A{exampleId;createdAt;name;properties;constructor(e={}){this.exampleId=e.exampleId??ee.randomUUID(),this.createdAt=e.createdAt??new Date().toISOString(),this.name=e.name??null,this.properties=e.properties??{}}static create(e){return new A({properties:e})}setProperty(e,t){return this.properties[e]=t,this}getProperty(e){return this.properties[e]}getProperties(){return{...this.properties}}toModel(){return{example_id:this.exampleId,created_at:this.createdAt,name:this.name??void 0,...this.properties}}}class j{name;threshold;success;score;reason;strictMode;evaluationModel;error;additionalMetadata;id;constructor(e={}){this.name=e.name??null,this.threshold=e.threshold??null,this.success=e.success??null,this.score=e.score??null,this.reason=e.reason??null,this.strictMode=e.strictMode??null,this.evaluationModel=e.evaluationModel??null,this.error=e.error??null,this.additionalMetadata=e.additionalMetadata??{},this.id=e.id??null}toModel(){let e={name:this.name??"",threshold:this.threshold??0,success:this.success??!1};if(this.score!==void 0&&this.score!==null)e.score=this.score;if(this.reason!==void 0&&this.reason!==null)e.reason=this.reason;if(this.strictMode!==void 0&&this.strictMode!==null)e.strict_mode=this.strictMode;if(this.evaluationModel!==void 0&&this.evaluationModel!==null)e.evaluation_model=this.evaluationModel;if(this.error!==void 0&&this.error!==null)e.error=this.error;if(this.additionalMetadata&&Object.keys(this.additionalMetadata).length>0)e.additional_metadata=this.additionalMetadata;if(this.id!==void 0&&this.id!==null)e.id=this.id;return e}}class F{success;scorersData;name;dataObject;traceId;runDuration;evaluationCost;constructor(e={}){this.success=e.success??null,this.scorersData=e.scorersData??[],this.name=e.name??null,this.dataObject=e.dataObject??null,this.traceId=e.traceId??null,this.runDuration=e.runDuration??null,this.evaluationCost=e.evaluationCost??null}toModel(){let e={success:this.success??!1,scorers_data:(this.scorersData??[]).map((t)=>t.toModel())};if(this.name!==void 0&&this.name!==null)e.name=this.name;if(this.dataObject!==void 0&&this.dataObject!==null)if(this.dataObject instanceof A)e.data_object=this.dataObject.toModel();else e.data_object=this.dataObject;if(this.traceId!==void 0&&this.traceId!==null)e.trace_id=this.traceId;if(this.runDuration!==void 0&&this.runDuration!==null)e.run_duration=this.runDuration;if(this.evaluationCost!==void 0&&this.evaluationCost!==null)e.evaluation_cost=this.evaluationCost;return e}}
3
3
 
4
- //# debugId=B4B296718866621164756E2164756E21
4
+ //# debugId=FF17D184C02B542664756E2164756E21
5
5
  //# sourceMappingURL=index.cjs.map