judgeval 0.2.9 → 0.3.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/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -0
- package/dist/data/example-params.d.ts +13 -0
- package/dist/data/example-params.d.ts.map +1 -0
- package/dist/data/example-params.js +12 -0
- package/dist/data/example-params.js.map +1 -0
- package/dist/data/example.d.ts +4 -0
- package/dist/data/example.d.ts.map +1 -0
- package/dist/data/example.js +10 -0
- package/dist/data/example.js.map +1 -0
- package/dist/data/index.d.ts +3 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +3 -0
- package/dist/data/index.js.map +1 -0
- package/dist/env.d.ts +6 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +13 -0
- package/dist/env.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/dist/index.umd.js +2 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/internal/api/index.d.ts +23 -0
- package/dist/internal/api/index.d.ts.map +1 -0
- package/dist/internal/api/index.js +132 -0
- package/dist/internal/api/index.js.map +1 -0
- package/dist/internal/api/models/BaseScorer.d.ts +23 -0
- package/dist/internal/api/models/BaseScorer.d.ts.map +1 -0
- package/dist/internal/api/models/BaseScorer.js +6 -0
- package/dist/internal/api/models/BaseScorer.js.map +1 -0
- package/dist/internal/api/models/EvalResults.d.ts +12 -0
- package/dist/internal/api/models/EvalResults.d.ts.map +1 -0
- package/dist/internal/api/models/EvalResults.js +6 -0
- package/dist/internal/api/models/EvalResults.js.map +1 -0
- package/dist/internal/api/models/EvalResultsFetch.d.ts +9 -0
- package/dist/internal/api/models/EvalResultsFetch.d.ts.map +1 -0
- package/dist/internal/api/models/EvalResultsFetch.js +6 -0
- package/dist/internal/api/models/EvalResultsFetch.js.map +1 -0
- package/dist/internal/api/models/Example.d.ts +10 -0
- package/dist/internal/api/models/Example.d.ts.map +1 -0
- package/dist/internal/api/models/Example.js +6 -0
- package/dist/internal/api/models/Example.js.map +1 -0
- package/dist/internal/api/models/ExampleEvaluationRun.d.ts +20 -0
- package/dist/internal/api/models/ExampleEvaluationRun.d.ts.map +1 -0
- package/dist/internal/api/models/ExampleEvaluationRun.js +6 -0
- package/dist/internal/api/models/ExampleEvaluationRun.js.map +1 -0
- package/dist/internal/api/models/FetchPromptScorersRequest.d.ts +8 -0
- package/dist/internal/api/models/FetchPromptScorersRequest.d.ts.map +1 -0
- package/dist/internal/api/models/FetchPromptScorersRequest.js +6 -0
- package/dist/internal/api/models/FetchPromptScorersRequest.js.map +1 -0
- package/dist/internal/api/models/FetchPromptScorersResponse.d.ts +9 -0
- package/dist/internal/api/models/FetchPromptScorersResponse.d.ts.map +1 -0
- package/dist/internal/api/models/FetchPromptScorersResponse.js +6 -0
- package/dist/internal/api/models/FetchPromptScorersResponse.js.map +1 -0
- package/dist/internal/api/models/OtelTraceSpan.d.ts +33 -0
- package/dist/internal/api/models/OtelTraceSpan.d.ts.map +1 -0
- package/dist/internal/api/models/OtelTraceSpan.js +6 -0
- package/dist/internal/api/models/OtelTraceSpan.js.map +1 -0
- package/dist/internal/api/models/PromptScorer.d.ts +14 -0
- package/dist/internal/api/models/PromptScorer.d.ts.map +1 -0
- package/dist/internal/api/models/PromptScorer.js +6 -0
- package/dist/internal/api/models/PromptScorer.js.map +1 -0
- package/dist/internal/api/models/ResolveProjectNameRequest.d.ts +8 -0
- package/dist/internal/api/models/ResolveProjectNameRequest.d.ts.map +1 -0
- package/dist/internal/api/models/ResolveProjectNameRequest.js +6 -0
- package/dist/internal/api/models/ResolveProjectNameRequest.js.map +1 -0
- package/dist/internal/api/models/ResolveProjectNameResponse.d.ts +8 -0
- package/dist/internal/api/models/ResolveProjectNameResponse.d.ts.map +1 -0
- package/dist/internal/api/models/ResolveProjectNameResponse.js +6 -0
- package/dist/internal/api/models/ResolveProjectNameResponse.js.map +1 -0
- package/dist/internal/api/models/SavePromptScorerRequest.d.ts +12 -0
- package/dist/internal/api/models/SavePromptScorerRequest.d.ts.map +1 -0
- package/dist/internal/api/models/SavePromptScorerRequest.js +6 -0
- package/dist/internal/api/models/SavePromptScorerRequest.js.map +1 -0
- package/dist/internal/api/models/SavePromptScorerResponse.d.ts +9 -0
- package/dist/internal/api/models/SavePromptScorerResponse.d.ts.map +1 -0
- package/dist/internal/api/models/SavePromptScorerResponse.js +6 -0
- package/dist/internal/api/models/SavePromptScorerResponse.js.map +1 -0
- package/dist/internal/api/models/ScorerConfig.d.ts +13 -0
- package/dist/internal/api/models/ScorerConfig.d.ts.map +1 -0
- package/dist/internal/api/models/ScorerConfig.js +6 -0
- package/dist/internal/api/models/ScorerConfig.js.map +1 -0
- package/dist/internal/api/models/ScorerData.d.ts +17 -0
- package/dist/internal/api/models/ScorerData.d.ts.map +1 -0
- package/dist/internal/api/models/ScorerData.js +6 -0
- package/dist/internal/api/models/ScorerData.js.map +1 -0
- package/dist/internal/api/models/ScorerExistsRequest.d.ts +8 -0
- package/dist/internal/api/models/ScorerExistsRequest.d.ts.map +1 -0
- package/dist/internal/api/models/ScorerExistsRequest.js +6 -0
- package/dist/internal/api/models/ScorerExistsRequest.js.map +1 -0
- package/dist/internal/api/models/ScorerExistsResponse.d.ts +8 -0
- package/dist/internal/api/models/ScorerExistsResponse.d.ts.map +1 -0
- package/dist/internal/api/models/ScorerExistsResponse.js +6 -0
- package/dist/internal/api/models/ScorerExistsResponse.js.map +1 -0
- package/dist/internal/api/models/ScoringResult.d.ts +17 -0
- package/dist/internal/api/models/ScoringResult.d.ts.map +1 -0
- package/dist/internal/api/models/ScoringResult.js +6 -0
- package/dist/internal/api/models/ScoringResult.js.map +1 -0
- package/dist/internal/api/models/TraceEvaluationRun.d.ts +18 -0
- package/dist/internal/api/models/TraceEvaluationRun.d.ts.map +1 -0
- package/dist/internal/api/models/TraceEvaluationRun.js +6 -0
- package/dist/internal/api/models/TraceEvaluationRun.js.map +1 -0
- package/dist/internal/api/models.d.ts +24 -0
- package/dist/internal/api/models.d.ts.map +1 -0
- package/dist/internal/api/models.js +24 -0
- package/dist/internal/api/models.js.map +1 -0
- package/dist/scorers/api-scorer.d.ts +23 -0
- package/dist/scorers/api-scorer.d.ts.map +1 -0
- package/dist/scorers/api-scorer.js +36 -0
- package/dist/scorers/api-scorer.js.map +1 -0
- package/dist/scorers/api_scorers/answer-correctness-scorer.d.ts +11 -0
- package/dist/scorers/api_scorers/answer-correctness-scorer.d.ts.map +1 -0
- package/dist/scorers/api_scorers/answer-correctness-scorer.js +20 -0
- package/dist/scorers/api_scorers/answer-correctness-scorer.js.map +1 -0
- package/dist/scorers/api_scorers/answer-relevancy-scorer.d.ts +11 -0
- package/dist/scorers/api_scorers/answer-relevancy-scorer.d.ts.map +1 -0
- package/dist/scorers/api_scorers/answer-relevancy-scorer.js +19 -0
- package/dist/scorers/api_scorers/answer-relevancy-scorer.js.map +1 -0
- package/dist/scorers/api_scorers/faithfulness-scorer.d.ts +11 -0
- package/dist/scorers/api_scorers/faithfulness-scorer.d.ts.map +1 -0
- package/dist/scorers/api_scorers/faithfulness-scorer.js +20 -0
- package/dist/scorers/api_scorers/faithfulness-scorer.js.map +1 -0
- package/dist/scorers/api_scorers/index.d.ts +2 -0
- package/dist/scorers/api_scorers/index.d.ts.map +1 -0
- package/dist/scorers/api_scorers/index.js +2 -0
- package/dist/scorers/api_scorers/index.js.map +1 -0
- package/dist/scorers/api_scorers/instruction-adherence-scorer.d.ts +11 -0
- package/dist/scorers/api_scorers/instruction-adherence-scorer.d.ts.map +1 -0
- package/dist/scorers/api_scorers/instruction-adherence-scorer.js +20 -0
- package/dist/scorers/api_scorers/instruction-adherence-scorer.js.map +1 -0
- package/dist/scorers/api_scorers/prompt_scorer/base-prompt-scorer.d.ts +48 -0
- package/dist/scorers/api_scorers/prompt_scorer/base-prompt-scorer.d.ts.map +1 -0
- package/dist/scorers/api_scorers/prompt_scorer/base-prompt-scorer.js +133 -0
- package/dist/scorers/api_scorers/prompt_scorer/base-prompt-scorer.js.map +1 -0
- package/dist/scorers/api_scorers/prompt_scorer/index.d.ts +5 -0
- package/dist/scorers/api_scorers/prompt_scorer/index.d.ts.map +1 -0
- package/dist/scorers/api_scorers/prompt_scorer/index.js +5 -0
- package/dist/scorers/api_scorers/prompt_scorer/index.js.map +1 -0
- package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.d.ts +14 -0
- package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.d.ts.map +1 -0
- package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.js +44 -0
- package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.js.map +1 -0
- package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer.d.ts +7 -0
- package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer.d.ts.map +1 -0
- package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer.js +9 -0
- package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer.js.map +1 -0
- package/dist/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.d.ts +6 -0
- package/dist/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.d.ts.map +1 -0
- package/dist/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.js +8 -0
- package/dist/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.js.map +1 -0
- package/dist/scorers/base-scorer.d.ts +10 -0
- package/dist/scorers/base-scorer.d.ts.map +1 -0
- package/dist/scorers/base-scorer.js +41 -0
- package/dist/scorers/base-scorer.js.map +1 -0
- package/dist/scorers/index.d.ts +4 -0
- package/dist/scorers/index.d.ts.map +1 -0
- package/dist/scorers/index.js +4 -0
- package/dist/scorers/index.js.map +1 -0
- package/dist/tracer/OpenTelemetryKeys.d.ts +12 -0
- package/dist/tracer/OpenTelemetryKeys.d.ts.map +1 -0
- package/dist/tracer/OpenTelemetryKeys.js +12 -0
- package/dist/tracer/OpenTelemetryKeys.js.map +1 -0
- package/dist/tracer/Tracer.d.ts +47 -0
- package/dist/tracer/Tracer.d.ts.map +1 -0
- package/dist/tracer/Tracer.js +235 -0
- package/dist/tracer/Tracer.js.map +1 -0
- package/dist/tracer/TracerConfiguration.d.ts +71 -0
- package/dist/tracer/TracerConfiguration.d.ts.map +1 -0
- package/dist/tracer/TracerConfiguration.js +111 -0
- package/dist/tracer/TracerConfiguration.js.map +1 -0
- package/dist/tracer/exporters/JudgmentSpanExporter.d.ts +36 -0
- package/dist/tracer/exporters/JudgmentSpanExporter.d.ts.map +1 -0
- package/dist/tracer/exporters/JudgmentSpanExporter.js +72 -0
- package/dist/tracer/exporters/JudgmentSpanExporter.js.map +1 -0
- package/dist/tracer/exporters/NoOpSpanExporter.d.ts +12 -0
- package/dist/tracer/exporters/NoOpSpanExporter.d.ts.map +1 -0
- package/dist/tracer/exporters/NoOpSpanExporter.js +16 -0
- package/dist/tracer/exporters/NoOpSpanExporter.js.map +1 -0
- package/dist/tracer/exporters/index.d.ts +3 -0
- package/dist/tracer/exporters/index.d.ts.map +1 -0
- package/dist/tracer/exporters/index.js +3 -0
- package/dist/tracer/exporters/index.js.map +1 -0
- package/dist/tracer/index.d.ts +5 -0
- package/dist/tracer/index.d.ts.map +1 -0
- package/dist/tracer/index.js +5 -0
- package/dist/tracer/index.js.map +1 -0
- package/dist/umd.d.ts +2 -0
- package/dist/umd.d.ts.map +1 -0
- package/dist/umd.js +2 -0
- package/dist/umd.js.map +1 -0
- package/dist/utils/annotate.d.ts +2 -0
- package/dist/utils/annotate.d.ts.map +1 -0
- package/dist/utils/annotate.js +27 -0
- package/dist/utils/annotate.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +27 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +70 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/types.d.ts +4 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +2 -0
- package/dist/utils/types.js.map +1 -0
- package/dist/utils/validation.d.ts +11 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +16 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +57 -108
- package/LICENSE.md +0 -202
- package/README.md +0 -372
- package/dist/cjs/clients.js +0 -78
- package/dist/cjs/clients.js.map +0 -1
- package/dist/cjs/common/integrations/langgraph.js +0 -471
- package/dist/cjs/common/integrations/langgraph.js.map +0 -1
- package/dist/cjs/common/logger-instance.js +0 -64
- package/dist/cjs/common/logger-instance.js.map +0 -1
- package/dist/cjs/common/logger.js +0 -225
- package/dist/cjs/common/logger.js.map +0 -1
- package/dist/cjs/common/token-costs.js +0 -95
- package/dist/cjs/common/token-costs.js.map +0 -1
- package/dist/cjs/common/tracer.js +0 -1099
- package/dist/cjs/common/tracer.js.map +0 -1
- package/dist/cjs/constants.js +0 -347
- package/dist/cjs/constants.js.map +0 -1
- package/dist/cjs/data/datasets/eval-dataset-client.js +0 -394
- package/dist/cjs/data/datasets/eval-dataset-client.js.map +0 -1
- package/dist/cjs/data/datasets/eval-dataset.js +0 -405
- package/dist/cjs/data/datasets/eval-dataset.js.map +0 -1
- package/dist/cjs/data/example.js +0 -159
- package/dist/cjs/data/example.js.map +0 -1
- package/dist/cjs/data/result.js +0 -83
- package/dist/cjs/data/result.js.map +0 -1
- package/dist/cjs/e2etests/eval-operations.test.js +0 -282
- package/dist/cjs/e2etests/eval-operations.test.js.map +0 -1
- package/dist/cjs/e2etests/judgee-traces.test.js +0 -278
- package/dist/cjs/e2etests/judgee-traces.test.js.map +0 -1
- package/dist/cjs/evaluation-run.js +0 -136
- package/dist/cjs/evaluation-run.js.map +0 -1
- package/dist/cjs/exporters/otel-exporter.js +0 -352
- package/dist/cjs/exporters/otel-exporter.js.map +0 -1
- package/dist/cjs/index.js +0 -78
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/judges/index.js +0 -237
- package/dist/cjs/judges/index.js.map +0 -1
- package/dist/cjs/judgment-client.js +0 -798
- package/dist/cjs/judgment-client.js.map +0 -1
- package/dist/cjs/rules.js +0 -322
- package/dist/cjs/rules.js.map +0 -1
- package/dist/cjs/run-evaluation.js +0 -700
- package/dist/cjs/run-evaluation.js.map +0 -1
- package/dist/cjs/scorers/api-scorer.js +0 -304
- package/dist/cjs/scorers/api-scorer.js.map +0 -1
- package/dist/cjs/scorers/base-scorer.js +0 -293
- package/dist/cjs/scorers/base-scorer.js.map +0 -1
- package/dist/cjs/scorers/metrics/answer-correctness/answer-correctness.js +0 -562
- package/dist/cjs/scorers/metrics/answer-correctness/answer-correctness.js.map +0 -1
- package/dist/cjs/scorers/metrics/answer-correctness/index.js +0 -19
- package/dist/cjs/scorers/metrics/answer-correctness/index.js.map +0 -1
- package/dist/cjs/scorers/metrics/answer-correctness/prompts.js +0 -175
- package/dist/cjs/scorers/metrics/answer-correctness/prompts.js.map +0 -1
- package/dist/cjs/scorers/metrics/answer-relevancy/answer-relevancy.js +0 -514
- package/dist/cjs/scorers/metrics/answer-relevancy/answer-relevancy.js.map +0 -1
- package/dist/cjs/scorers/metrics/answer-relevancy/index.js +0 -19
- package/dist/cjs/scorers/metrics/answer-relevancy/index.js.map +0 -1
- package/dist/cjs/scorers/metrics/answer-relevancy/prompts.js +0 -179
- package/dist/cjs/scorers/metrics/answer-relevancy/prompts.js.map +0 -1
- package/dist/cjs/scorers/metrics/faithfulness/faithfulness.js +0 -512
- package/dist/cjs/scorers/metrics/faithfulness/faithfulness.js.map +0 -1
- package/dist/cjs/scorers/metrics/faithfulness/index.js +0 -19
- package/dist/cjs/scorers/metrics/faithfulness/index.js.map +0 -1
- package/dist/cjs/scorers/metrics/faithfulness/prompts.js +0 -232
- package/dist/cjs/scorers/metrics/faithfulness/prompts.js.map +0 -1
- package/dist/cjs/scorers/metrics/hallucination/hallucination.js +0 -386
- package/dist/cjs/scorers/metrics/hallucination/hallucination.js.map +0 -1
- package/dist/cjs/scorers/metrics/hallucination/index.js +0 -11
- package/dist/cjs/scorers/metrics/hallucination/index.js.map +0 -1
- package/dist/cjs/scorers/metrics/hallucination/prompts.js +0 -106
- package/dist/cjs/scorers/metrics/hallucination/prompts.js.map +0 -1
- package/dist/cjs/scorers/metrics/instruction-adherence/index.js +0 -19
- package/dist/cjs/scorers/metrics/instruction-adherence/index.js.map +0 -1
- package/dist/cjs/scorers/metrics/instruction-adherence/instruction-adherence.js +0 -378
- package/dist/cjs/scorers/metrics/instruction-adherence/instruction-adherence.js.map +0 -1
- package/dist/cjs/scorers/metrics/instruction-adherence/prompts.js +0 -124
- package/dist/cjs/scorers/metrics/instruction-adherence/prompts.js.map +0 -1
- package/dist/esm/clients.js +0 -47
- package/dist/esm/clients.js.map +0 -1
- package/dist/esm/common/integrations/langgraph.js +0 -444
- package/dist/esm/common/integrations/langgraph.js.map +0 -1
- package/dist/esm/common/logger-instance.js +0 -59
- package/dist/esm/common/logger-instance.js.map +0 -1
- package/dist/esm/common/logger.js +0 -208
- package/dist/esm/common/logger.js.map +0 -1
- package/dist/esm/common/token-costs.js +0 -91
- package/dist/esm/common/token-costs.js.map +0 -1
- package/dist/esm/common/tracer.js +0 -1093
- package/dist/esm/common/tracer.js.map +0 -1
- package/dist/esm/constants.js +0 -341
- package/dist/esm/constants.js.map +0 -1
- package/dist/esm/data/datasets/eval-dataset-client.js +0 -387
- package/dist/esm/data/datasets/eval-dataset-client.js.map +0 -1
- package/dist/esm/data/datasets/eval-dataset.js +0 -375
- package/dist/esm/data/datasets/eval-dataset.js.map +0 -1
- package/dist/esm/data/example.js +0 -154
- package/dist/esm/data/example.js.map +0 -1
- package/dist/esm/data/result.js +0 -78
- package/dist/esm/data/result.js.map +0 -1
- package/dist/esm/e2etests/eval-operations.test.js +0 -254
- package/dist/esm/e2etests/eval-operations.test.js.map +0 -1
- package/dist/esm/e2etests/judgee-traces.test.js +0 -253
- package/dist/esm/e2etests/judgee-traces.test.js.map +0 -1
- package/dist/esm/evaluation-run.js +0 -132
- package/dist/esm/evaluation-run.js.map +0 -1
- package/dist/esm/exporters/otel-exporter.js +0 -348
- package/dist/esm/exporters/otel-exporter.js.map +0 -1
- package/dist/esm/index.js +0 -20
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/judges/index.js +0 -205
- package/dist/esm/judges/index.js.map +0 -1
- package/dist/esm/judgment-client.js +0 -768
- package/dist/esm/judgment-client.js.map +0 -1
- package/dist/esm/rules.js +0 -314
- package/dist/esm/rules.js.map +0 -1
- package/dist/esm/run-evaluation.js +0 -681
- package/dist/esm/run-evaluation.js.map +0 -1
- package/dist/esm/scorers/api-scorer.js +0 -286
- package/dist/esm/scorers/api-scorer.js.map +0 -1
- package/dist/esm/scorers/base-scorer.js +0 -287
- package/dist/esm/scorers/base-scorer.js.map +0 -1
- package/dist/esm/scorers/metrics/answer-correctness/answer-correctness.js +0 -558
- package/dist/esm/scorers/metrics/answer-correctness/answer-correctness.js.map +0 -1
- package/dist/esm/scorers/metrics/answer-correctness/index.js +0 -3
- package/dist/esm/scorers/metrics/answer-correctness/index.js.map +0 -1
- package/dist/esm/scorers/metrics/answer-correctness/prompts.js +0 -171
- package/dist/esm/scorers/metrics/answer-correctness/prompts.js.map +0 -1
- package/dist/esm/scorers/metrics/answer-relevancy/answer-relevancy.js +0 -510
- package/dist/esm/scorers/metrics/answer-relevancy/answer-relevancy.js.map +0 -1
- package/dist/esm/scorers/metrics/answer-relevancy/index.js +0 -3
- package/dist/esm/scorers/metrics/answer-relevancy/index.js.map +0 -1
- package/dist/esm/scorers/metrics/answer-relevancy/prompts.js +0 -175
- package/dist/esm/scorers/metrics/answer-relevancy/prompts.js.map +0 -1
- package/dist/esm/scorers/metrics/faithfulness/faithfulness.js +0 -508
- package/dist/esm/scorers/metrics/faithfulness/faithfulness.js.map +0 -1
- package/dist/esm/scorers/metrics/faithfulness/index.js +0 -3
- package/dist/esm/scorers/metrics/faithfulness/index.js.map +0 -1
- package/dist/esm/scorers/metrics/faithfulness/prompts.js +0 -228
- package/dist/esm/scorers/metrics/faithfulness/prompts.js.map +0 -1
- package/dist/esm/scorers/metrics/hallucination/hallucination.js +0 -382
- package/dist/esm/scorers/metrics/hallucination/hallucination.js.map +0 -1
- package/dist/esm/scorers/metrics/hallucination/index.js +0 -3
- package/dist/esm/scorers/metrics/hallucination/index.js.map +0 -1
- package/dist/esm/scorers/metrics/hallucination/prompts.js +0 -102
- package/dist/esm/scorers/metrics/hallucination/prompts.js.map +0 -1
- package/dist/esm/scorers/metrics/instruction-adherence/index.js +0 -3
- package/dist/esm/scorers/metrics/instruction-adherence/index.js.map +0 -1
- package/dist/esm/scorers/metrics/instruction-adherence/instruction-adherence.js +0 -374
- package/dist/esm/scorers/metrics/instruction-adherence/instruction-adherence.js.map +0 -1
- package/dist/esm/scorers/metrics/instruction-adherence/prompts.js +0 -120
- package/dist/esm/scorers/metrics/instruction-adherence/prompts.js.map +0 -1
- package/dist/types/clients.d.ts +0 -6
- package/dist/types/common/integrations/langgraph.d.ts +0 -39
- package/dist/types/common/logger-instance.d.ts +0 -3
- package/dist/types/common/logger.d.ts +0 -54
- package/dist/types/common/token-costs.d.ts +0 -36
- package/dist/types/common/tracer.d.ts +0 -249
- package/dist/types/constants.d.ts +0 -51
- package/dist/types/data/datasets/eval-dataset-client.d.ts +0 -44
- package/dist/types/data/datasets/eval-dataset.d.ts +0 -45
- package/dist/types/data/example.d.ts +0 -82
- package/dist/types/data/result.d.ts +0 -51
- package/dist/types/e2etests/eval-operations.test.d.ts +0 -5
- package/dist/types/e2etests/judgee-traces.test.d.ts +0 -5
- package/dist/types/evaluation-run.d.ts +0 -44
- package/dist/types/exporters/otel-exporter.d.ts +0 -16
- package/dist/types/index.d.ts +0 -11
- package/dist/types/judges/index.d.ts +0 -50
- package/dist/types/judgment-client.d.ts +0 -149
- package/dist/types/rules.d.ts +0 -120
- package/dist/types/run-evaluation.d.ts +0 -78
- package/dist/types/scorers/api-scorer.d.ts +0 -84
- package/dist/types/scorers/base-scorer.d.ts +0 -162
- package/dist/types/scorers/metrics/answer-correctness/answer-correctness.d.ts +0 -80
- package/dist/types/scorers/metrics/answer-correctness/index.d.ts +0 -2
- package/dist/types/scorers/metrics/answer-correctness/prompts.d.ts +0 -71
- package/dist/types/scorers/metrics/answer-relevancy/answer-relevancy.d.ts +0 -74
- package/dist/types/scorers/metrics/answer-relevancy/index.d.ts +0 -2
- package/dist/types/scorers/metrics/answer-relevancy/prompts.d.ts +0 -71
- package/dist/types/scorers/metrics/faithfulness/faithfulness.d.ts +0 -73
- package/dist/types/scorers/metrics/faithfulness/index.d.ts +0 -2
- package/dist/types/scorers/metrics/faithfulness/prompts.d.ts +0 -94
- package/dist/types/scorers/metrics/hallucination/hallucination.d.ts +0 -63
- package/dist/types/scorers/metrics/hallucination/index.d.ts +0 -3
- package/dist/types/scorers/metrics/hallucination/prompts.d.ts +0 -63
- package/dist/types/scorers/metrics/instruction-adherence/index.d.ts +0 -2
- package/dist/types/scorers/metrics/instruction-adherence/instruction-adherence.d.ts +0 -63
- package/dist/types/scorers/metrics/instruction-adherence/prompts.d.ts +0 -78
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare enum ExampleParams {
|
|
2
|
+
INPUT = "input",
|
|
3
|
+
ACTUAL_OUTPUT = "actual_output",
|
|
4
|
+
EXPECTED_OUTPUT = "expected_output",
|
|
5
|
+
CONTEXT = "context",
|
|
6
|
+
RETRIEVAL_CONTEXT = "retrieval_context",
|
|
7
|
+
TOOLS_CALLED = "tools_called",
|
|
8
|
+
EXPECTED_TOOLS = "expected_tools",
|
|
9
|
+
ADDITIONAL_METADATA = "additional_metadata"
|
|
10
|
+
}
|
|
11
|
+
export type ExampleParamKeys = keyof typeof ExampleParams;
|
|
12
|
+
export type ExampleParamValues = `${ExampleParams}`;
|
|
13
|
+
//# sourceMappingURL=example-params.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example-params.d.ts","sourceRoot":"","sources":["../../src/data/example-params.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACvB,KAAK,UAAU;IACf,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,OAAO,YAAY;IACnB,iBAAiB,sBAAsB;IACvC,YAAY,iBAAiB;IAC7B,cAAc,mBAAmB;IACjC,mBAAmB,wBAAwB;CAC5C;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,aAAa,CAAC;AAC1D,MAAM,MAAM,kBAAkB,GAAG,GAAG,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export var ExampleParams;
|
|
2
|
+
(function (ExampleParams) {
|
|
3
|
+
ExampleParams["INPUT"] = "input";
|
|
4
|
+
ExampleParams["ACTUAL_OUTPUT"] = "actual_output";
|
|
5
|
+
ExampleParams["EXPECTED_OUTPUT"] = "expected_output";
|
|
6
|
+
ExampleParams["CONTEXT"] = "context";
|
|
7
|
+
ExampleParams["RETRIEVAL_CONTEXT"] = "retrieval_context";
|
|
8
|
+
ExampleParams["TOOLS_CALLED"] = "tools_called";
|
|
9
|
+
ExampleParams["EXPECTED_TOOLS"] = "expected_tools";
|
|
10
|
+
ExampleParams["ADDITIONAL_METADATA"] = "additional_metadata";
|
|
11
|
+
})(ExampleParams || (ExampleParams = {}));
|
|
12
|
+
//# sourceMappingURL=example-params.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example-params.js","sourceRoot":"","sources":["../../src/data/example-params.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aASX;AATD,WAAY,aAAa;IACvB,gCAAe,CAAA;IACf,gDAA+B,CAAA;IAC/B,oDAAmC,CAAA;IACnC,oCAAmB,CAAA;IACnB,wDAAuC,CAAA;IACvC,8CAA6B,CAAA;IAC7B,kDAAiC,CAAA;IACjC,4DAA2C,CAAA;AAC7C,CAAC,EATW,aAAa,KAAb,aAAa,QASxB"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Example as ExampleModel } from "../internal/api/models/Example";
|
|
2
|
+
export type Example<T extends Record<string, any> = Record<string, any>> = ExampleModel & T;
|
|
3
|
+
export declare function createExample<T extends Record<string, any>>(properties: T): Example<T>;
|
|
4
|
+
//# sourceMappingURL=example.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../../src/data/example.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEzE,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IACrE,YAAY,GAAG,CAAC,CAAC;AAEnB,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzD,UAAU,EAAE,CAAC,GACZ,OAAO,CAAC,CAAC,CAAC,CASZ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example.js","sourceRoot":"","sources":["../../src/data/example.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,aAAa,CAC3B,UAAa;IAEb,MAAM,OAAO,GAAe;QAC1B,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,IAAI,EAAE,IAAI;QACV,GAAG,UAAU;KACA,CAAC;IAEhB,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC"}
|
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const JUDGMENT_API_KEY: string | null;
|
|
2
|
+
export declare const JUDGMENT_ORG_ID: string | null;
|
|
3
|
+
export declare const JUDGMENT_API_URL: string;
|
|
4
|
+
export declare const JUDGMENT_DEFAULT_GPT_MODEL: string;
|
|
5
|
+
export declare const JUDGMENT_NO_COLOR: string | null;
|
|
6
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,gBAAgB,eAAgC,CAAC;AAC9D,eAAO,MAAM,eAAe,eAA+B,CAAC;AAC5D,eAAO,MAAM,gBAAgB,QAG5B,CAAC;AACF,eAAO,MAAM,0BAA0B,QAGtC,CAAC;AACF,eAAO,MAAM,iBAAiB,eAAiC,CAAC"}
|
package/dist/env.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
function getEnvVar(varName, defaultValue) {
|
|
2
|
+
const value = process.env[varName];
|
|
3
|
+
if (!value) {
|
|
4
|
+
return defaultValue ?? null;
|
|
5
|
+
}
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
export const JUDGMENT_API_KEY = getEnvVar("JUDGMENT_API_KEY");
|
|
9
|
+
export const JUDGMENT_ORG_ID = getEnvVar("JUDGMENT_ORG_ID");
|
|
10
|
+
export const JUDGMENT_API_URL = getEnvVar("JUDGMENT_API_URL", "https://api.judgmentlabs.ai");
|
|
11
|
+
export const JUDGMENT_DEFAULT_GPT_MODEL = getEnvVar("JUDGMENT_DEFAULT_GPT_MODEL", "gpt-4.1");
|
|
12
|
+
export const JUDGMENT_NO_COLOR = getEnvVar("JUDGMENT_NO_COLOR");
|
|
13
|
+
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAEA,SAAS,SAAS,CAAC,OAAe,EAAE,YAAqB;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,YAAY,IAAI,IAAI,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC,kBAAkB,CAAC,CAAC;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC,iBAAiB,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CACvC,kBAAkB,EAClB,6BAA6B,CAC9B,CAAC;AACF,MAAM,CAAC,MAAM,0BAA0B,GAAG,SAAS,CACjD,4BAA4B,EAC5B,SAAS,CACV,CAAC;AACF,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./tracer";
|
|
2
|
+
export * from "./utils/logger";
|
|
3
|
+
export * from "./data";
|
|
4
|
+
export * from "./scorers";
|
|
5
|
+
export * from "./internal/api";
|
|
6
|
+
export * from "./utils/annotate";
|
|
7
|
+
export * from "./utils/types";
|
|
8
|
+
export * from "./env";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAE/B,cAAc,QAAQ,CAAC;AAEvB,cAAc,WAAW,CAAC;AAE1B,cAAc,gBAAgB,CAAC;AAE/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAE9B,cAAc,OAAO,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(()=>{"use strict";var t={d:(e,r)=>{for(var i in r)t.o(r,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:r[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{APIScorerType:()=>S,BasePromptScorer:()=>b,ExampleParams:()=>P,JUDGMENT_API_KEY:()=>u,JUDGMENT_API_URL:()=>l,JUDGMENT_DEFAULT_GPT_MODEL:()=>d,JUDGMENT_NO_COLOR:()=>p,JUDGMENT_ORG_ID:()=>h,JudgmentAPIError:()=>O,JudgmentApiClient:()=>m,JudgmentSpanExporter:()=>i,Logger:()=>_,NoOpSpanExporter:()=>o,OpenTelemetryKeys:()=>n,PromptScorer:()=>j,TracePromptScorer:()=>U,Tracer:()=>f,TracerBuilder:()=>w,TracerConfiguration:()=>E,TracerConfigurationBuilder:()=>T,createAPIScorer:()=>v,createBaseScorer:()=>I,createExample:()=>y,fetchPromptScorer:()=>R,parseFunctionArgs:()=>z,pushPromptScorer:()=>N,scorerExists:()=>A});const r=require("@opentelemetry/exporter-trace-otlp-http");class i extends r.OTLPTraceExporter{constructor(t,e,r,i){if(!i||""===i.trim())throw new Error("projectId is required for JudgmentSpanExporter");super({url:t,headers:{Authorization:`Bearer ${e}`,"X-Organization-Id":r,"X-Project-Id":i}})}static builder(){return new s}}class s{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 new Error("Endpoint is required");if(!this._apiKey||""===this._apiKey.trim())throw new Error("API key is required");if(!this._organizationId||""===this._organizationId.trim())throw new Error("Organization ID is required");if(!this._projectId||""===this._projectId.trim())throw new Error("Project ID is required");return new i(this._endpoint,this._apiKey,this._organizationId,this._projectId)}}class o{export(t,e){e({code:0})}flush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}class n{}n.AttributeKeys={JUDGMENT_SPAN_KIND:"judgment.span_kind",JUDGMENT_INPUT:"judgment.input",JUDGMENT_OUTPUT:"judgment.output",PENDING_TRACE_EVAL:"judgment.pending_trace_eval"},n.ResourceKeys={JUDGMENT_PROJECT_ID:"judgment.project_id"};const a=require("@opentelemetry/api");function c(t,e){return process.env[t]||(e??null)}const u=c("JUDGMENT_API_KEY"),h=c("JUDGMENT_ORG_ID"),l=c("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),d=c("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),p=c("JUDGMENT_NO_COLOR");class m{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 new 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){const 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 new Error(`HTTP Error: ${r.status} - ${await r.text()}`)}async addToRunEvalQueueTraces(t){const 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 new Error(`HTTP Error: ${r.status} - ${await r.text()}`)}async logEvalResults(t){const e=this.buildUrl("/log_eval_results/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw new Error(`HTTP Error: ${r.status} - ${await r.text()}`)}async fetchExperimentRun(t){const e=this.buildUrl("/fetch_experiment_run/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw new Error(`HTTP Error: ${r.status} - ${await r.text()}`)}async getEvaluationStatus(t,e){const r=new URLSearchParams;r.set("experiment_run_id",t),r.set("project_name",e);const i=this.buildUrl("/get_evaluation_status/"+(r.toString()?"?"+r.toString():"")),s=await fetch(i,{method:"GET",headers:this.buildHeaders()});if(!s.ok)throw new Error(`HTTP Error: ${s.status} - ${await s.text()}`)}async scorerExists(t){const e=this.buildUrl("/scorer_exists/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw new Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async saveScorer(t){const e=this.buildUrl("/save_scorer/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw new Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchScorers(t){const e=this.buildUrl("/fetch_scorers/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw new Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async projectsResolve(t){const e=this.buildUrl("/projects/resolve/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw new Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}}class _{static initialize(){if(!_.initialized){const t=process.env.JUDGMENT_NO_COLOR;_.useColor=!t&&process.stdout.isTTY,_.initialized=!0}}static setLevel(t){_.currentLevel=t}static setUseColor(t){_.useColor=t}static log(t,e){if(_.initialize(),t<_.currentLevel)return;let r=`${(new Date).toISOString().replace("T"," ").substring(0,19)} - judgeval - ${Object.keys(_.Level).find(e=>_.Level[e]===t)||"UNKNOWN"} - ${e}`;_.useColor&&(r=`${t===_.Level.DEBUG||t===_.Level.INFO?_.GRAY:t===_.Level.WARNING?_.YELLOW:_.RED}${r}${_.RESET}`),(t>=_.Level.ERROR?process.stderr:process.stdout).write(r+"\n")}static debug(t){_.log(_.Level.DEBUG,t)}static info(t){_.log(_.Level.INFO,t)}static warning(t){_.log(_.Level.WARNING,t)}static warn(t){_.log(_.Level.WARNING,t)}static error(t){_.log(_.Level.ERROR,t)}static critical(t){_.log(_.Level.CRITICAL,t)}}_.RESET="[0m",_.RED="[31m",_.YELLOW="[33m",_.GRAY="[90m",_.Level={DEBUG:0,INFO:1,WARNING:2,ERROR:3,CRITICAL:4},_.initialized=!1,_.currentLevel=_.Level.INFO,_.useColor=!0;const g="judgeval-tracer";class E{constructor(t,e,r,i,s,o=g){this.projectName=t,this.apiKey=e,this.organizationId=r,this.apiUrl=i,this.enableEvaluation=s,this.tracerName=o}static createDefault(t){return(new T).projectName(t).build()}static builder(){return new T}}class T{constructor(){this._apiKey=u||"",this._organizationId=h||"",this._apiUrl=l||"",this._enableEvaluation=!0,this._tracerName=g}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}build(){if(!this._projectName)throw new Error("Project name is required");if(!this._apiKey)throw new Error("API key is required");if(!this._organizationId)throw new Error("Organization ID is required");if(!this._apiUrl)throw new Error("API URL is required");return new E(this._projectName,this._apiKey,this._organizationId,this._apiUrl,this._enableEvaluation,this._tracerName)}}class f{getConfiguration(){return this.configuration}getProjectId(){return this.projectId}getSerializer(){return this.serializer}constructor(t,e,r){this.projectId=null,this.configuration=t,this.apiClient=e,this.serializer=r,this.projectIdPromise=this.resolveProjectId()}async resolveProjectId(){try{_.info(`Resolving project ID for project: ${this.configuration.projectName}`);const t={project_name:this.configuration.projectName},e=await this.apiClient.projectsResolve(t);return this.projectId=e.project_id?.toString()||null,this.projectId?_.info(`Successfully resolved project ID: ${this.projectId}`):_.warn(`Project ID not found for project: ${this.configuration.projectName}`),this.projectId}catch(t){return this.projectId=null,null}}static builder(){return new w}static createDefault(t){return w.builder().configuration(E.createDefault(t)).build()}static createWithConfiguration(t){return w.builder().configuration(t).build()}async getSpanExporter(){const t=await this.projectIdPromise;return t?this.createJudgmentSpanExporter(t):(_.error("Failed to resolve project "+this.configuration.projectName+", please create it first at https://app.judgmentlabs.ai/org/"+this.configuration.organizationId+"/projects. Skipping Judgment export."),new o)}setSpanKind(t){const e=a.trace.getActiveSpan();e?null!==t&&e.setAttribute(n.AttributeKeys.JUDGMENT_SPAN_KIND,t):_.warn("No active span found, skipping setSpanKind")}setAttribute(t,e,r){const i=a.trace.getActiveSpan();i?i.setAttribute(t,this.serializer(e)):_.warn("No active span found, skipping setAttribute")}setLLMSpan(){this.setSpanKind("llm")}setToolSpan(){this.setSpanKind("tool")}setGeneralSpan(){this.setSpanKind("span")}setAttributes(t){if(!t)return;const e=a.trace.getActiveSpan();if(e)for(const[r,i]of Object.entries(t))e.setAttribute(r,this.serializer(i));else _.warn("No active span found, skipping setAttributes")}setInput(t,e){this.setAttribute(n.AttributeKeys.JUDGMENT_INPUT,t)}setOutput(t,e){this.setAttribute(n.AttributeKeys.JUDGMENT_OUTPUT,t)}asyncEvaluate(t,e,r){if(!this.configuration.enableEvaluation)return;const i=a.trace.getActiveSpan();if(!i)return void _.warn("No active span found, skipping asyncEvaluate");if(!i.isRecording())return void _.warn("Active span is not recording, skipping asyncEvaluate");const s=i.spanContext(),o=s.traceId,n=s.spanId;_.info(`asyncEvaluate: project=${this.configuration.projectName}, traceId=${o}, spanId=${n}, scorer=${t.name}`);const c=this.createEvaluationRun(t,e,r,o,n);this.enqueueEvaluation(c)}asyncTraceEvaluate(t,e){if(!this.configuration.enableEvaluation)return;const r=a.trace.getActiveSpan();if(!r)return void _.warn("No active span found, skipping asyncTraceEvaluate");if(!r.isRecording())return void _.warn("Active span is not recording, skipping asyncTraceEvaluate");const i=r.spanContext(),s=i.traceId,o=i.spanId;_.info(`asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${s}, spanId=${o}, scorer=${t.name}`);try{const i=this.createTraceEvaluationRun(t,e,s,o),a=this.serializer(i);r.setAttribute(n.AttributeKeys.PENDING_TRACE_EVAL,a)}catch(t){_.error(`Failed to serialize trace evaluation: ${t instanceof Error?t.message:String(t)}`)}}createTraceEvaluationRun(t,e,r,i){const s=`async_trace_evaluate_${i||Date.now()}`,o=e||d,n=t.toTransport();return{project_name:this.configuration.projectName,eval_name:s,scorer:n,model:o,organization_id:this.configuration.organizationId,trace_id:r,trace_span_id:i}}createJudgmentSpanExporter(t){const e=this.configuration.apiUrl.endsWith("/")?`${this.configuration.apiUrl}otel/v1/traces`:`${this.configuration.apiUrl}/otel/v1/traces`;return new i(e,this.configuration.apiKey,this.configuration.organizationId,t)}createEvaluationRun(t,e,r,i,s){const o=`async_evaluate_${s||Date.now()}`,n=r||d,a=t.toTransport();return{project_name:this.configuration.projectName,eval_name:o,examples:[e],custom_scorers:[],judgment_scorers:[a],model:n,trace_id:i,trace_span_id:s}}async enqueueEvaluation(t){try{await this.apiClient.addToRunEvalQueueExamples(t),_.info(`Enqueuing evaluation run: ${t.eval_name}`)}catch(t){_.error(`Failed to enqueue evaluation run: ${t instanceof Error?t.message:String(t)}`)}}}class w{constructor(){this._serializer=JSON.stringify}static builder(){return new w}configuration(t){return this.config=t,this}apiClient(t){return this._apiClient=t,this}serializer(t){return this._serializer=t,this}build(){if(!this.config)throw new Error("Configuration is required");const t=this._apiClient||new m(this.config.apiUrl,this.config.apiKey,this.config.organizationId);return new f(this.config,t,this._serializer)}}function y(t){return{example_id:void 0,created_at:(new Date).toISOString(),name:null,...t}}var P,S;function I(){const t={score_type:"",class_name:"BaseScorer",name:"",addModel:e=>{t.model=e},successCheck:()=>{if(null!=t.error)return!1;if(null==t.score)return!1;const e=t.threshold??.5,r=t.score;return null!=e&&null!=r&&r>=e},getRequiredParams:()=>[],toTransport:()=>({score_type:t.score_type,name:t.name,threshold:t.threshold??.5,strict_mode:t.strict_mode??!1,required_params:[],kwargs:{}})};return t.name=t.class_name,!0===t.strict_mode&&(t.threshold=1),t}function v(t,e){const r=I();return r.scoreType=t,r.name=t,r.score_type=t,r.requiredParams=e,r.setThreshold=t=>{if(t<0||t>1)throw new Error(`Threshold must be between 0 and 1, got: ${t}`);r.threshold=t},r.getScoreType=()=>r.scoreType,r.setRequiredParams=t=>{r.requiredParams=t},r}!function(t){t.INPUT="input",t.ACTUAL_OUTPUT="actual_output",t.EXPECTED_OUTPUT="expected_output",t.CONTEXT="context",t.RETRIEVAL_CONTEXT="retrieval_context",t.TOOLS_CALLED="tools_called",t.EXPECTED_TOOLS="expected_tools",t.ADDITIONAL_METADATA="additional_metadata"}(P||(P={})),function(t){t.PROMPT_SCORER="Prompt Scorer",t.TRACE_PROMPT_SCORER="Trace Prompt Scorer",t.FAITHFULNESS="Faithfulness",t.ANSWER_RELEVANCY="Answer Relevancy",t.ANSWER_CORRECTNESS="Answer Correctness",t.INSTRUCTION_ADHERENCE="Instruction Adherence",t.EXECUTION_ORDER="Execution Order",t.TOOL_ORDER="Tool Order",t.CLASSIFIER="Classifier",t.TOOL_DEPENDENCY="Tool Dependency",t.CUSTOM="Custom"}(S||(S={}));class O extends Error{constructor(t,e){super(e),this.statusCode=t,this.name="JudgmentAPIError"}}async function N(t,e,r,i,s=u||"",o=h||"",n){if(!l||!s||!o)throw new Error("Missing required API credentials");const a=new m(l,s,o);return(await a.saveScorer({name:t,prompt:e,threshold:r,options:i,is_trace:n})).name}async function R(t,e=u||"",r=h||""){if(!l||!e||!r)throw new Error("Missing required API credentials");const i=new m(l,e,r),s=await i.fetchScorers({names:[t]});if(0===s.scorers.length)throw new O(404,`Scorer with name ${t} not found`);const{created_at:o,updated_at:n,...a}=s.scorers[0];return a}async function A(t,e=u||"",r=h||""){if(!l||!e||!r)throw new Error("Missing required API credentials");const i=new m(l,e,r);return(await i.scorerExists({name:t})).exists}class b{constructor(t,e,r,i,s,o,n=u||"",a=h||""){this.scoreType=t,this.name=e,this.prompt=r,this.threshold=i,this.requiredParams=s,this.options=o,this.judgmentApiKey=n,this.organizationId=a,this.score_type=t,this.class_name="BasePromptScorer",this.model=void 0,this.score=void 0,this.error=null,this.strict_mode=!1}static async get(t,e=u||"",r=h||""){const i=await R(t,e,r),s=!0===i.is_trace;if(s!==(this.prototype.scoreType===S.TRACE_PROMPT_SCORER))throw new O(400,`Scorer with name ${t} is not a ${this.name}`);return new this(s?S.TRACE_PROMPT_SCORER:S.PROMPT_SCORER,i.name,i.prompt,i.threshold,[],i.options,e,r)}static async create(t,e,r=.5,i,s=u||"",o=h||""){if(await A(t,s,o))throw new O(400,`Scorer with name ${t} already exists. Either use the existing scorer with the get() method or use a new name.`);const n=this.prototype.scoreType===S.TRACE_PROMPT_SCORER,a=n?S.TRACE_PROMPT_SCORER:S.PROMPT_SCORER;return await N(t,e,r,i,s,o,n),new this(a,t,e,r,[],i,s,o)}async updateThreshold(t){this.setThreshold(t),await this.pushPromptScorer()}async setPrompt(t){this.prompt=t,await this.pushPromptScorer()}async setOptions(t){this.options=t,await this.pushPromptScorer()}async appendToPrompt(t){this.prompt+=t,await this.pushPromptScorer()}getThreshold(){return this.threshold}getPrompt(){return this.prompt}getOptions(){return this.options?{...this.options}:null}getName(){return this.name}getConfig(){return{name:this.name,prompt:this.prompt,threshold:this.threshold,options:this.options}}async pushPromptScorer(){await N(this.name,this.prompt,this.threshold,this.options,this.judgmentApiKey,this.organizationId)}toString(){return`${this.constructor.name}(name=${this.name}, prompt=${this.prompt}, threshold=${this.threshold}, options=${JSON.stringify(this.options)})`}addModel(t){this.model=t}successCheck(){if(null!=this.error)return!1;if(null==this.score)return!1;const t=this.threshold??.5,e=this.score;return null!=t&&null!=e&&e>=t}getRequiredParams(){return Array.isArray(this.requiredParams)?[...this.requiredParams]:[]}setThreshold(t){if(t<0||t>1)throw new Error(`Threshold must be between 0 and 1, got: ${t}`);this.threshold=t}getScoreType(){return this.scoreType}setRequiredParams(t){this.requiredParams=t}toTransport(){return{score_type:this.getScoreType(),name:this.getName(),threshold:this.getThreshold(),strict_mode:this.strict_mode??!1,required_params:this.getRequiredParams(),kwargs:{prompt:this.getPrompt(),...this.getOptions()?{options:this.getOptions()}:{}}}}}class j extends b{constructor(t,e,r,i,s=[],o,n=u||"",a=h||""){super(t,e,r,i,s,o,n,a)}}class U extends b{constructor(t,e,r,i,s=[],o,n=u||"",a=h||""){super(t,e,r,i,s,o,n,a)}}const C=/^([^(]+?)=>/,D=/^[^(]*\(\s*([^)]*)\)/m,$=/,/,L=/^\s*(_?)(\S+?)\1\s*$/,x=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function z(t){const e=function(t){const e=function(t){return Function.prototype.toString.call(t)}(t).replace(x,"");return e.match(C)||e.match(D)}(t);return e&&e[1]?e[1].split($).map(t=>t.replace(L,(t,e,r)=>r).trim()).filter(t=>t.length>0):[]}module.exports=e})();
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","mappings":"mBACA,IAAIA,EAAsB,CCA1BA,EAAwB,CAACC,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXF,EAAoBI,EAAEF,EAAYC,KAASH,EAAoBI,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,MCJ3EH,EAAwB,CAACS,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFV,EAAyBC,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,M,ynBCLvD,MAAM,EAA+BC,QAAQ,2CCEtC,MAAMC,UAA6B,EAAAC,kBACxC,WAAAC,CACEC,EACAC,EACAC,EACAC,GAEA,IAAKA,GAAkC,KAArBA,EAAUC,OAC1B,MAAM,IAAIC,MAAM,kDAGlBC,MAAM,CACJC,IAAKP,EACLQ,QAAS,CACPC,cAAe,UAAUR,IACzB,oBAAqBC,EACrB,eAAgBC,IAGtB,CAKO,cAAOO,GACZ,OAAO,IAAIC,CACb,EAGK,MAAMA,EAMX,WAAAZ,GAAe,CAKR,QAAAC,CAASA,GAEd,OADAY,KAAKC,UAAYb,EACVY,IACT,CAKO,MAAAX,CAAOA,GAEZ,OADAW,KAAKE,QAAUb,EACRW,IACT,CAKO,cAAAV,CAAeA,GAEpB,OADAU,KAAKG,gBAAkBb,EAChBU,IACT,CAKO,SAAAT,CAAUA,GAEf,OADAS,KAAKI,WAAab,EACXS,IACT,CAKO,KAAAK,GACL,IAAKL,KAAKC,WAAuC,KAA1BD,KAAKC,UAAUT,OACpC,MAAM,IAAIC,MAAM,wBAElB,IAAKO,KAAKE,SAAmC,KAAxBF,KAAKE,QAAQV,OAChC,MAAM,IAAIC,MAAM,uBAElB,IAAKO,KAAKG,iBAAmD,KAAhCH,KAAKG,gBAAgBX,OAChD,MAAM,IAAIC,MAAM,+BAElB,IAAKO,KAAKI,YAAyC,KAA3BJ,KAAKI,WAAWZ,OACtC,MAAM,IAAIC,MAAM,0BAGlB,OAAO,IAAIR,EACTe,KAAKC,UACLD,KAAKE,QACLF,KAAKG,gBACLH,KAAKI,WAET,ECvFK,MAAME,EACX,OACEC,EACAC,GAEAA,EAAe,CAAEC,KAAM,GACzB,CAEA,KAAAC,GACE,OAAOC,QAAQC,SACjB,CAEA,QAAAC,GACE,OAAOF,QAAQC,SACjB,ECrBK,MAAME,GACY,EAAAC,cAAgB,CACrCC,mBAAoB,qBACpBC,eAAgB,iBAChBC,gBAAiB,kBACjBC,mBAAoB,+BAGC,EAAAC,aAAe,CACpCC,oBAAqB,uBCTzB,MAAM,EAA+BrC,QAAQ,sBCE7C,SAASsC,EAAUC,EAAiBC,GAElC,OADcC,QAAQC,IAAIH,KAEjBC,GAAgB,KAG3B,CAEO,MAAMG,EAAmBL,EAAU,oBAC7BM,EAAkBN,EAAU,mBAC5BO,EAAmBP,EAC9B,mBACA,+BAEWQ,EAA6BR,EACxC,6BACA,WAEWS,EAAoBT,EAAU,qBCdpC,MAAMU,EAKX,WAAA7C,CAAY8C,EAAiB5C,EAAgBC,GAC3CU,KAAKiC,QAAUA,EACfjC,KAAKX,OAASA,EACdW,KAAKV,eAAiBA,CACxB,CAEQ,QAAA4C,CAASC,GACf,OAAOnC,KAAKiC,QAAUE,CACxB,CAEQ,YAAAC,GACN,IAAKpC,KAAKX,SAAWW,KAAKV,eACxB,MAAM,IAAIG,MAAM,8CAElB,MAAO,CACL,eAAgB,mBAChBI,cAAe,UAAUG,KAAKX,SAC9B,oBAAqBW,KAAKV,eAE9B,CAEA,+BAAM+C,CACJC,GAEA,MAAM3C,EAAMK,KAAKkC,SAAS,mCACpBK,QAAiBC,MAAM7C,EAAK,CAChC8C,OAAQ,OACR7C,QAASI,KAAKoC,eACdM,KAAMC,KAAKC,UAAUN,KAGvB,IAAKC,EAASM,GACZ,MAAM,IAAIpD,MACR,eAAe8C,EAASO,kBAAkBP,EAASQ,SAKzD,CAEA,6BAAMC,CACJV,GAEA,MAAM3C,EAAMK,KAAKkC,SAAS,iCACpBK,QAAiBC,MAAM7C,EAAK,CAChC8C,OAAQ,OACR7C,QAASI,KAAKoC,eACdM,KAAMC,KAAKC,UAAUN,KAGvB,IAAKC,EAASM,GACZ,MAAM,IAAIpD,MACR,eAAe8C,EAASO,kBAAkBP,EAASQ,SAKzD,CAEA,oBAAME,CAAeX,GACnB,MAAM3C,EAAMK,KAAKkC,SAAS,sBACpBK,QAAiBC,MAAM7C,EAAK,CAChC8C,OAAQ,OACR7C,QAASI,KAAKoC,eACdM,KAAMC,KAAKC,UAAUN,KAGvB,IAAKC,EAASM,GACZ,MAAM,IAAIpD,MACR,eAAe8C,EAASO,kBAAkBP,EAASQ,SAKzD,CAEA,wBAAMG,CAAmBZ,GACvB,MAAM3C,EAAMK,KAAKkC,SAAS,0BACpBK,QAAiBC,MAAM7C,EAAK,CAChC8C,OAAQ,OACR7C,QAASI,KAAKoC,eACdM,KAAMC,KAAKC,UAAUN,KAGvB,IAAKC,EAASM,GACZ,MAAM,IAAIpD,MACR,eAAe8C,EAASO,kBAAkBP,EAASQ,SAKzD,CAEA,yBAAMI,CACJC,EACAC,GAEA,MAAMC,EAAc,IAAIC,gBACxBD,EAAYE,IAAI,oBAAqBJ,GACrCE,EAAYE,IAAI,eAAgBH,GAChC,MAAM1D,EAAMK,KAAKkC,SACf,2BACGoB,EAAYG,WAAa,IAAMH,EAAYG,WAAa,KAEvDlB,QAAiBC,MAAM7C,EAAK,CAChC8C,OAAQ,MACR7C,QAASI,KAAKoC,iBAGhB,IAAKG,EAASM,GACZ,MAAM,IAAIpD,MACR,eAAe8C,EAASO,kBAAkBP,EAASQ,SAKzD,CAEA,kBAAMW,CACJpB,GAEA,MAAM3C,EAAMK,KAAKkC,SAAS,mBACpBK,QAAiBC,MAAM7C,EAAK,CAChC8C,OAAQ,OACR7C,QAASI,KAAKoC,eACdM,KAAMC,KAAKC,UAAUN,KAGvB,IAAKC,EAASM,GACZ,MAAM,IAAIpD,MACR,eAAe8C,EAASO,kBAAkBP,EAASQ,UAIvD,aAAcR,EAASoB,MACzB,CAEA,gBAAMC,CACJtB,GAEA,MAAM3C,EAAMK,KAAKkC,SAAS,iBACpBK,QAAiBC,MAAM7C,EAAK,CAChC8C,OAAQ,OACR7C,QAASI,KAAKoC,eACdM,KAAMC,KAAKC,UAAUN,KAGvB,IAAKC,EAASM,GACZ,MAAM,IAAIpD,MACR,eAAe8C,EAASO,kBAAkBP,EAASQ,UAIvD,aAAcR,EAASoB,MACzB,CAEA,kBAAME,CACJvB,GAEA,MAAM3C,EAAMK,KAAKkC,SAAS,mBACpBK,QAAiBC,MAAM7C,EAAK,CAChC8C,OAAQ,OACR7C,QAASI,KAAKoC,eACdM,KAAMC,KAAKC,UAAUN,KAGvB,IAAKC,EAASM,GACZ,MAAM,IAAIpD,MACR,eAAe8C,EAASO,kBAAkBP,EAASQ,UAIvD,aAAcR,EAASoB,MACzB,CAEA,qBAAMG,CACJxB,GAEA,MAAM3C,EAAMK,KAAKkC,SAAS,sBACpBK,QAAiBC,MAAM7C,EAAK,CAChC8C,OAAQ,OACR7C,QAASI,KAAKoC,eACdM,KAAMC,KAAKC,UAAUN,KAGvB,IAAKC,EAASM,GACZ,MAAM,IAAIpD,MACR,eAAe8C,EAASO,kBAAkBP,EAASQ,UAIvD,aAAcR,EAASoB,MACzB,EC3MK,MAAMI,EAkBH,iBAAOC,GACb,IAAKD,EAAOE,YAAa,CACvB,MAAMC,EAAUzC,QAAQC,IAAIK,kBAC5BgC,EAAOI,UAAYD,GAAWzC,QAAQ2C,OAAOC,MAC7CN,EAAOE,aAAc,CACvB,CACF,CAEO,eAAOK,CAASC,GACrBR,EAAOS,aAAeD,CACxB,CAEO,kBAAOE,CAAYN,GACxBJ,EAAOI,SAAWA,CACpB,CAEQ,UAAOO,CAAIH,EAAeI,GAGhC,GAFAZ,EAAOC,aAEHO,EAAQR,EAAOS,aACjB,OAWF,IAAII,EAAmB,IARL,IAAIC,MACnBC,cACAC,QAAQ,IAAK,KACbC,UAAU,EAAG,oBAEd5G,OAAO6G,KAAKlB,EAAOmB,OAAOC,KACvBjH,GAAQ6F,EAAOmB,MAAMhH,KAAsCqG,IACzD,eAC4DI,IAE/DZ,EAAOI,WAOTS,EAAmB,GALjBL,IAAUR,EAAOmB,MAAME,OAASb,IAAUR,EAAOmB,MAAMG,KACnDtB,EAAOuB,KACPf,IAAUR,EAAOmB,MAAMK,QACrBxB,EAAOyB,OACPzB,EAAO0B,MACeb,IAAmBb,EAAO2B,UAIxDnB,GAASR,EAAOmB,MAAMS,MAAQlE,QAAQmE,OAASnE,QAAQ2C,QAClDyB,MAAMjB,EAAmB,KAClC,CAEO,YAAOkB,CAAMnB,GAClBZ,EAAOW,IAAIX,EAAOmB,MAAME,MAAOT,EACjC,CAEO,WAAOoB,CAAKpB,GACjBZ,EAAOW,IAAIX,EAAOmB,MAAMG,KAAMV,EAChC,CAEO,cAAOqB,CAAQrB,GACpBZ,EAAOW,IAAIX,EAAOmB,MAAMK,QAASZ,EACnC,CAEO,WAAOsB,CAAKtB,GACjBZ,EAAOW,IAAIX,EAAOmB,MAAMK,QAASZ,EACnC,CAEO,YAAOuB,CAAMvB,GAClBZ,EAAOW,IAAIX,EAAOmB,MAAMS,MAAOhB,EACjC,CAEO,eAAOwB,CAASxB,GACrBZ,EAAOW,IAAIX,EAAOmB,MAAMkB,SAAUzB,EACpC,EAvFwB,EAAAe,MAAQ,OACR,EAAAD,IAAM,QACN,EAAAD,OAAS,QACT,EAAAF,KAAO,QAEjB,EAAAJ,MAAQ,CACpBE,MAAO,EACPC,KAAM,EACNE,QAAS,EACTI,MAAO,EACPS,SAAU,GAGG,EAAAnC,aAAc,EACd,EAAAO,aAAuBT,EAAOmB,MAAMG,KACpC,EAAAlB,UAAW,EChBrB,MAAMkC,EAAc,kBCoBpB,MAAMC,EACX,WAAAnH,CACkBoH,EACAlH,EACAC,EACAkH,EACAC,EACAC,EAAqBL,GALrB,KAAAE,YAAAA,EACA,KAAAlH,OAAAA,EACA,KAAAC,eAAAA,EACA,KAAAkH,OAAAA,EACA,KAAAC,iBAAAA,EACA,KAAAC,WAAAA,CACf,CAeI,oBAAOC,CAAcJ,GAC1B,OAAO,IAAIK,GAA6BL,YAAYA,GAAalG,OACnE,CAEO,cAAOP,GACZ,OAAO,IAAI8G,CACb,EAiBK,MAAMA,EAAb,cAEU,KAAA1G,QAAkByB,GAAoB,GACtC,KAAAxB,gBAA0ByB,GAAmB,GAC7C,KAAAiF,QAAkBhF,GAAoB,GACtC,KAAAiF,mBAA6B,EAC7B,KAAAC,YAAsBV,CA0DhC,CAxDS,WAAAE,CAAYA,GAEjB,OADAvG,KAAKgH,aAAeT,EACbvG,IACT,CAEO,MAAAX,CAAOA,GAEZ,OADAW,KAAKE,QAAUb,EACRW,IACT,CAEO,cAAAV,CAAeA,GAEpB,OADAU,KAAKG,gBAAkBb,EAChBU,IACT,CAEO,MAAAwG,CAAOA,GAEZ,OADAxG,KAAK6G,QAAUL,EACRxG,IACT,CAEO,gBAAAyG,CAAiBA,GAEtB,OADAzG,KAAK8G,kBAAoBL,EAClBzG,IACT,CAEO,UAAA0G,CAAWA,GAEhB,OADA1G,KAAK+G,YAAcL,EACZ1G,IACT,CAEO,KAAAK,GACL,IAAKL,KAAKgH,aACR,MAAM,IAAIvH,MAAM,4BAGlB,IAAKO,KAAKE,QACR,MAAM,IAAIT,MAAM,uBAGlB,IAAKO,KAAKG,gBACR,MAAM,IAAIV,MAAM,+BAGlB,IAAKO,KAAK6G,QACR,MAAM,IAAIpH,MAAM,uBAGlB,OAAO,IAAI6G,EACTtG,KAAKgH,aACLhH,KAAKE,QACLF,KAAKG,gBACLH,KAAK6G,QACL7G,KAAK8G,kBACL9G,KAAK+G,YAET,ECjHK,MAAME,EAOJ,gBAAAC,GACL,OAAOlH,KAAKmH,aACd,CAEO,YAAAC,GACL,OAAOpH,KAAKT,SACd,CAEO,aAAA8H,GACL,OAAOrH,KAAKsH,UACd,CAEA,WAAAnI,CACEgI,EACAI,EACAD,GAlBM,KAAA/H,UAA2B,KAoBjCS,KAAKmH,cAAgBA,EACrBnH,KAAKuH,UAAYA,EACjBvH,KAAKsH,WAAaA,EAClBtH,KAAKwH,iBAAmBxH,KAAKyH,kBAC/B,CAEQ,sBAAMA,GACZ,IACE1D,EAAOgC,KACL,qCAAqC/F,KAAKmH,cAAcZ,eAG1D,MAAMmB,EAAqC,CACzCrE,aAAcrD,KAAKmH,cAAcZ,aAG7BhE,QAAiBvC,KAAKuH,UAAUzD,gBAAgB4D,GAWtD,OAVA1H,KAAKT,UAAYgD,EAASoF,YAAYlE,YAAc,KAEhDzD,KAAKT,UACPwE,EAAOgC,KAAK,qCAAqC/F,KAAKT,aAEtDwE,EAAOkC,KACL,qCAAqCjG,KAAKmH,cAAcZ,eAIrDvG,KAAKT,SACd,CAAE,MAAO2G,GAEP,OADAlG,KAAKT,UAAY,KACV,IACT,CACF,CAEO,cAAOO,GACZ,OAAO,IAAI8H,CACb,CAEO,oBAAOjB,CAAcJ,GAC1B,OAAOqB,EAAc9H,UAClBqH,cAAcb,EAAoBK,cAAcJ,IAChDlG,OACL,CAEO,8BAAOwH,CACZV,GAEA,OAAOS,EAAc9H,UAAUqH,cAAcA,GAAe9G,OAC9D,CAEO,qBAAMyH,GAGX,MAAMvI,QAAkBS,KAAKwH,iBAC7B,OAAKjI,EAUES,KAAK+H,2BAA2BxI,IATrCwE,EAAOmC,MACL,6BACElG,KAAKmH,cAAcZ,YACnB,+DACAvG,KAAKmH,cAAc7H,eACnB,wCAEG,IAAIgB,EAGf,CAEO,WAAA0H,CAAYC,GACjB,MAAMC,EAAc,EAAAC,MAAMC,gBACrBF,EAIQ,OAATD,GACFC,EAAYG,aACVvH,EAAkBC,cAAcC,mBAChCiH,GANFlE,EAAOkC,KAAK,6CAShB,CAEO,YAAAoC,CAAanK,EAAaa,EAAgBuJ,GAC/C,MAAMJ,EAAc,EAAAC,MAAMC,gBACrBF,EAILA,EAAYG,aAAanK,EAAK8B,KAAKsH,WAAWvI,IAH5CgF,EAAOkC,KAAK,8CAIhB,CAEO,UAAAsC,GACLvI,KAAKgI,YAAY,MACnB,CAEO,WAAAQ,GACLxI,KAAKgI,YAAY,OACnB,CAEO,cAAAS,GACLzI,KAAKgI,YAAY,OACnB,CAEO,aAAAU,CAAcC,GACnB,IAAKA,EACH,OAEF,MAAMT,EAAc,EAAAC,MAAMC,gBAC1B,GAAKF,EAIL,IAAK,MAAOhK,EAAKa,KAAUX,OAAOwK,QAAQD,GACxCT,EAAYG,aAAanK,EAAK8B,KAAKsH,WAAWvI,SAJ9CgF,EAAOkC,KAAK,+CAMhB,CAEO,QAAA4C,CAASC,EAAgBR,GAC9BtI,KAAKqI,aAAavH,EAAkBC,cAAcE,eAAgB6H,EACpE,CAEO,SAAAC,CAAUC,EAAiBV,GAChCtI,KAAKqI,aAAavH,EAAkBC,cAAcG,gBAAiB8H,EACrE,CAEO,aAAAC,CACLC,EACAC,EACAC,GAEA,IAAKpJ,KAAKmH,cAAcV,iBACtB,OAGF,MAAMyB,EAAc,EAAAC,MAAMC,gBAC1B,IAAKF,EAEH,YADAnE,EAAOkC,KAAK,gDAGd,IAAKiC,EAAYmB,cAEf,YADAtF,EAAOkC,KAAK,wDAId,MAAMqD,EAAcpB,EAAYoB,cAC1BC,EAAUD,EAAYC,QACtBC,EAASF,EAAYE,OAE3BzF,EAAOgC,KACL,0BAA0B/F,KAAKmH,cAAcZ,wBAAwBgD,aAAmBC,aAAkBN,EAAOO,QAGnH,MAAMC,EAAgB1J,KAAK2J,oBACzBT,EACAC,EACAC,EACAG,EACAC,GAEFxJ,KAAK4J,kBAAkBF,EACzB,CAEO,kBAAAG,CAAmBX,EAAoBE,GAC5C,IAAKpJ,KAAKmH,cAAcV,iBACtB,OAGF,MAAMyB,EAAc,EAAAC,MAAMC,gBAC1B,IAAKF,EAEH,YADAnE,EAAOkC,KAAK,qDAGd,IAAKiC,EAAYmB,cAEf,YADAtF,EAAOkC,KAAK,6DAId,MAAMqD,EAAcpB,EAAYoB,cAC1BC,EAAUD,EAAYC,QACtBC,EAASF,EAAYE,OAE3BzF,EAAOgC,KACL,+BAA+B/F,KAAKmH,cAAcZ,wBAAwBgD,aAAmBC,aAAkBN,EAAOO,QAGxH,IACE,MAAMK,EAAqB9J,KAAK+J,yBAC9Bb,EACAE,EACAG,EACAC,GAEIQ,EAAgBhK,KAAKsH,WAAWwC,GACtC5B,EAAYG,aACVvH,EAAkBC,cAAcI,mBAChC6I,EAEJ,CAAE,MAAO9D,GACPnC,EAAOmC,MACL,yCAAyCA,aAAiBzG,MAAQyG,EAAMvB,QAAUsF,OAAO/D,KAE7F,CACF,CAEQ,wBAAA6D,CACNb,EACAE,EACAG,EACAC,GAEA,MAAMU,EAAW,wBAAwBV,GAAU3E,KAAKsF,QAClDC,EAAYhB,GAAStH,EAErBuI,EAAenB,EAAOoB,cAE5B,MAAO,CACLjH,aAAcrD,KAAKmH,cAAcZ,YACjCgE,UAAWL,EACXhB,OAAQmB,EACRjB,MAAOgB,EACPI,gBAAiBxK,KAAKmH,cAAc7H,eACpCmL,SAAUlB,EACVmB,cAAelB,EAEnB,CAEQ,0BAAAzB,CAA2BxI,GACjC,MAAMH,EAAWY,KAAKmH,cAAcX,OAAOmE,SAAS,KAChD,GAAG3K,KAAKmH,cAAcX,uBACtB,GAAGxG,KAAKmH,cAAcX,wBAE1B,OAAO,IAAIvH,EACTG,EACAY,KAAKmH,cAAc9H,OACnBW,KAAKmH,cAAc7H,eACnBC,EAEJ,CAEQ,mBAAAoK,CACNT,EACAC,EACAC,EACAG,EACAC,GAEA,MAAMoB,EAAQ,kBAAkBpB,GAAU3E,KAAKsF,QACzCC,EAAYhB,GAAStH,EAErBuI,EAAenB,EAAOoB,cAa5B,MAX4C,CAC1CjH,aAAcrD,KAAKmH,cAAcZ,YACjCgE,UAAWK,EACXC,SAAU,CAAC1B,GACX2B,eAAgB,GAChBC,iBAAkB,CAACV,GACnBjB,MAAOgB,EACPK,SAAUlB,EACVmB,cAAelB,EAInB,CAEQ,uBAAMI,CACZF,GAEA,UACQ1J,KAAKuH,UAAUlF,0BAA0BqH,GAC/C3F,EAAOgC,KAAK,6BAA6B2D,EAAca,YACzD,CAAE,MAAOrE,GACPnC,EAAOmC,MACL,qCAAqCA,aAAiBzG,MAAQyG,EAAMvB,QAAUsF,OAAO/D,KAEzF,CACF,EAGK,MAAM0B,EAAb,cAGU,KAAAoD,YAA0BrI,KAAKC,SAoCzC,CAlCS,cAAO9C,GACZ,OAAO,IAAI8H,CACb,CAEO,aAAAT,CAAcA,GAEnB,OADAnH,KAAKiL,OAAS9D,EACPnH,IACT,CAEO,SAAAuH,CAAUA,GAEf,OADAvH,KAAKkL,WAAa3D,EACXvH,IACT,CAEO,UAAAsH,CAAWA,GAEhB,OADAtH,KAAKgL,YAAc1D,EACZtH,IACT,CAEO,KAAAK,GACL,IAAKL,KAAKiL,OACR,MAAM,IAAIxL,MAAM,6BAGlB,MAAM0L,EACJnL,KAAKkL,YACL,IAAIlJ,EACFhC,KAAKiL,OAAOzE,OACZxG,KAAKiL,OAAO5L,OACZW,KAAKiL,OAAO3L,gBAGhB,OAAO,IAAI2H,EAAOjH,KAAKiL,OAAQE,EAAQnL,KAAKgL,YAC9C,EC/VK,SAASI,EACdC,GASA,MAP4B,CAC1BC,gBAAYC,EACZC,YAAY,IAAI3G,MAAOC,cACvB2E,KAAM,QACH4B,EAIP,CChBA,IAAYI,ECEAC,ECQL,SAASC,IACd,MAAMzC,EAAqB,CACzB0C,WAAY,GACZC,WA+BkB,aA9BlBpC,KAAM,GACNqC,SAAW1C,IACTF,EAAOE,MAAQA,GAEjB2C,aAAc,KACZ,GAAoB,MAAhB7C,EAAOhD,MACT,OAAO,EAET,GAAoB,MAAhBgD,EAAO8C,MACT,OAAO,EAET,MAAMC,EAAY/C,EAAO+C,WAAa,GAChCD,EAAQ9C,EAAO8C,MACrB,OAAoB,MAAbC,GAA8B,MAATD,GAAiBA,GAASC,GAExDC,kBAAmB,IACV,GAET5B,YAAa,KACJ,CACLsB,WAAY1C,EAAO0C,WACnBnC,KAAMP,EAAOO,KACbwC,UAAW/C,EAAO+C,WAAa,GAC/BE,YAAajD,EAAOiD,cAAe,EACnCC,gBAAiB,GACjBC,OAAQ,CAAC,KAWf,OALAnD,EAAOO,KAAOP,EAAO2C,YACM,IAAvB3C,EAAOiD,cACTjD,EAAO+C,UAAY,GAGd/C,CACT,CDxBO,SAASoD,EAGdC,EAAcC,GACd,MAAMtD,EAASyC,IAsBf,OApBAzC,EAAOqD,UAAYA,EACnBrD,EAAOO,KAAO8C,EACdrD,EAAO0C,WAAaW,EACpBrD,EAAOsD,eAAiBA,EAExBtD,EAAOuD,aAAgBR,IACrB,GAAIA,EAAY,GAAKA,EAAY,EAC/B,MAAM,IAAIxM,MAAM,2CAA2CwM,KAE7D/C,EAAO+C,UAAYA,GAGrB/C,EAAOwD,aAAe,IACbxD,EAAOqD,UAGhBrD,EAAOyD,kBAAqBC,IAC1B1D,EAAOsD,eAAiBI,GAGnB1D,CACT,EDtDA,SAAYuC,GACV,gBACA,gCACA,oCACA,oBACA,wCACA,8BACA,kCACA,2CACD,CATD,CAAYA,IAAAA,EAAa,KCEzB,SAAYC,GACV,gCACA,4CACA,8BACA,sCACA,0CACA,gDACA,oCACA,0BACA,0BACA,oCACA,iBACD,CAZD,CAAYA,IAAAA,EAAa,KEKlB,MAAMmB,UAAyBpN,MACpC,WAAAN,CACS2N,EACPnI,GAEAjF,MAAMiF,GAHC,KAAAmI,WAAAA,EAIP9M,KAAKyJ,KAAO,kBACd,EAGKsD,eAAeC,EACpBvD,EACAwD,EACAhB,EACAiB,EACAC,EAAyBxL,GAAoB,GAC7CrC,EAAyBsC,GAAmB,GAC5CwL,GAEA,IAAKvL,IAAqBsL,IAAmB7N,EAC3C,MAAM,IAAIG,MAAM,oCAGlB,MAAM0L,EAAS,IAAInJ,EACjBH,EACAsL,EACA7N,GASF,aAPuB6L,EAAOvH,WAAW,CACvC6F,OACAwD,SACAhB,YACAiB,UACAG,SAAUD,KAEI3D,IAClB,CAEOsD,eAAeO,EACpB7D,EACA0D,EAAyBxL,GAAoB,GAC7CrC,EAAyBsC,GAAmB,IAE5C,IAAKC,IAAqBsL,IAAmB7N,EAC3C,MAAM,IAAIG,MAAM,oCAGlB,MAAM0L,EAAS,IAAInJ,EACjBH,EACAsL,EACA7N,GAEIiD,QAAiB4I,EAAOtH,aAAa,CAAE0J,MAAO,CAAC9D,KACrD,GAAgC,IAA5BlH,EAASiL,QAAQC,OACnB,MAAM,IAAIZ,EAAiB,IAAK,oBAAoBpD,eAEtD,MAAM,WAAE+B,EAAU,WAAEkC,KAAezC,GAAW1I,EAASiL,QAAQ,GAC/D,OAAOvC,CACT,CAEO8B,eAAerJ,EACpB+F,EACA0D,EAAyBxL,GAAoB,GAC7CrC,EAAyBsC,GAAmB,IAE5C,IAAKC,IAAqBsL,IAAmB7N,EAC3C,MAAM,IAAIG,MAAM,oCAGlB,MAAM0L,EAAS,IAAInJ,EACjBH,EACAsL,EACA7N,GAGF,aADuB6L,EAAOzH,aAAa,CAAE+F,UAC7BkE,MAClB,CCzEO,MAAeC,EAkBpB,WAAAzO,CACEoN,EACA9C,EACAwD,EACAhB,EACAO,EACAU,EACAC,EAAyBxL,GAAoB,GAC7CrC,EAAyBsC,GAAmB,IAE5C5B,KAAKuM,UAAYA,EACjBvM,KAAKyJ,KAAOA,EACZzJ,KAAKiN,OAASA,EACdjN,KAAKiM,UAAYA,EACjBjM,KAAKwM,eAAiBA,EACtBxM,KAAKkN,QAAUA,EACflN,KAAKmN,eAAiBA,EACtBnN,KAAKV,eAAiBA,EACtBU,KAAK4L,WAAaW,EAClBvM,KAAK6L,WAAa,mBAClB7L,KAAKoJ,WAAQmC,EACbvL,KAAKgM,WAAQT,EACbvL,KAAKkG,MAAQ,KACblG,KAAKmM,aAAc,CACrB,CAUA,gBAAa5N,CAEXkL,EACA0D,EAAyBxL,GAAoB,GAC7CrC,EAAyBsC,GAAmB,IAE5C,MAAMqJ,QAAeqC,EACnB7D,EACA0D,EACA7N,GAGI8N,GAA8B,IAApBnC,EAAOoC,SAIvB,GAAID,KAFFpN,KAAKtB,UAAU6N,YAAcb,EAAcmC,qBAG3C,MAAM,IAAIhB,EACR,IACA,oBAAoBpD,cAAiBzJ,KAAKyJ,QAQ9C,OAAO,IAAIzJ,KAJOoN,EACd1B,EAAcmC,oBACdnC,EAAcoC,cAIhB7C,EAAOxB,KACPwB,EAAOgC,OACPhC,EAAOgB,UACP,GACAhB,EAAOiC,QACPC,EACA7N,EAEJ,CAEA,mBAAayO,CAEXtE,EACAwD,EACAhB,EAAoB,GACpBiB,EACAC,EAAyBxL,GAAoB,GAC7CrC,EAAyBsC,GAAmB,IAE5C,SAAU8B,EAAa+F,EAAM0D,EAAgB7N,GAC3C,MAAM,IAAIuN,EACR,IACA,oBAAoBpD,6FAIxB,MAAM2D,EACJpN,KAAKtB,UAAU6N,YAAcb,EAAcmC,oBACvCtB,EAAYa,EACd1B,EAAcmC,oBACdnC,EAAcoC,cAYlB,aAVMd,EACJvD,EACAwD,EACAhB,EACAiB,EACAC,EACA7N,EACA8N,GAGK,IAAIpN,KACTuM,EACA9C,EACAwD,EACAhB,EACA,GACAiB,EACAC,EACA7N,EAEJ,CAEA,qBAAM0O,CAAgB/B,GACpBjM,KAAKyM,aAAaR,SACZjM,KAAKgN,kBACb,CAEA,eAAMiB,CAAUhB,GACdjN,KAAKiN,OAASA,QACRjN,KAAKgN,kBACb,CAEA,gBAAMkB,CAAWhB,GACflN,KAAKkN,QAAUA,QACTlN,KAAKgN,kBACb,CAEA,oBAAMmB,CAAeC,GACnBpO,KAAKiN,QAAUmB,QACTpO,KAAKgN,kBACb,CAEA,YAAAqB,GACE,OAAOrO,KAAKiM,SACd,CAEA,SAAAqC,GACE,OAAOtO,KAAKiN,MACd,CAEA,UAAAsB,GACE,OAAOvO,KAAKkN,QAAU,IAAKlN,KAAKkN,SAAY,IAC9C,CAEA,OAAAsB,GACE,OAAOxO,KAAKyJ,IACd,CAEA,SAAAgF,GACE,MAAO,CACLhF,KAAMzJ,KAAKyJ,KACXwD,OAAQjN,KAAKiN,OACbhB,UAAWjM,KAAKiM,UAChBiB,QAASlN,KAAKkN,QAElB,CAEA,sBAAMF,SACEA,EACJhN,KAAKyJ,KACLzJ,KAAKiN,OACLjN,KAAKiM,UACLjM,KAAKkN,QACLlN,KAAKmN,eACLnN,KAAKV,eAET,CAEA,QAAAmE,GACE,MAAO,GAAGzD,KAAKb,YAAYsK,aAAazJ,KAAKyJ,gBAC3CzJ,KAAKiN,qBACQjN,KAAKiM,sBAAsBtJ,KAAKC,UAAU5C,KAAKkN,WAChE,CAEA,QAAApB,CAAS1C,GACPpJ,KAAKoJ,MAAQA,CACf,CAEA,YAAA2C,GACE,GAAkB,MAAd/L,KAAKkG,MACP,OAAO,EAET,GAAkB,MAAdlG,KAAKgM,MACP,OAAO,EAET,MAAMC,EAAYjM,KAAKiM,WAAa,GAC9BD,EAAQhM,KAAKgM,MACnB,OAAoB,MAAbC,GAA8B,MAATD,GAAiBA,GAASC,CACxD,CAEA,iBAAAC,GACE,OAAIwC,MAAMC,QAAQ3O,KAAKwM,gBACd,IAAIxM,KAAKwM,gBAEX,EACT,CAEA,YAAAC,CAAaR,GACX,GAAIA,EAAY,GAAKA,EAAY,EAC/B,MAAM,IAAIxM,MAAM,2CAA2CwM,KAE7DjM,KAAKiM,UAAYA,CACnB,CAEA,YAAAS,GACE,OAAO1M,KAAKuM,SACd,CAEA,iBAAAI,CAAkBC,GAChB5M,KAAKwM,eAAiBI,CACxB,CAEA,WAAAtC,GACE,MAAO,CACLsB,WAAY5L,KAAK0M,eACjBjD,KAAMzJ,KAAKwO,UACXvC,UAAWjM,KAAKqO,eAChBlC,YAAanM,KAAKmM,cAAe,EACjCC,gBAAiBpM,KAAKkM,oBACtBG,OAAQ,CACNY,OAAQjN,KAAKsO,eACTtO,KAAKuO,aAAe,CAAErB,QAASlN,KAAKuO,cAAiB,CAAC,GAGhE,ECvPK,MAAMK,UAAqBhB,EAChC,WAAAzO,CACEoN,EACA9C,EACAwD,EACAhB,EACAO,EAAoC,GACpCU,EACAC,EAAyBxL,GAAoB,GAC7CrC,EAAyBsC,GAAmB,IAE5ClC,MACE6M,EACA9C,EACAwD,EACAhB,EACAO,EACAU,EACAC,EACA7N,EAEJ,EC3BK,MAAMuP,UAA0BjB,EACrC,WAAAzO,CACEoN,EACA9C,EACAwD,EACAhB,EACAO,EAAoC,GACpCU,EACAC,EAAyBxL,GAAoB,GAC7CrC,EAAyBsC,GAAmB,IAE5ClC,MACE6M,EACA9C,EACAwD,EACAhB,EACAO,EACAU,EACAC,EACA7N,EAEJ,ECvBF,MAAMwP,EAAY,cACZC,EAAU,wBACVC,EAAe,IACfC,EAAS,uBACTC,EAAiB,mCAWhB,SAASC,EAAkBC,GAChC,MAAMC,EANR,SAAqBD,GACnB,MAAME,EALR,SAAqBF,GACnB,OAAOG,SAAS7Q,UAAU+E,SAAS7E,KAAKwQ,EAC1C,CAGiBI,CAAYJ,GAAIrK,QAAQmK,EAAgB,IACvD,OAAOI,EAAOG,MAAMX,IAAcQ,EAAOG,MAAMV,EACjD,CAGeW,CAAYN,GACzB,OAAKC,GAASA,EAAK,GAIZA,EAAK,GACTM,MAAMX,GACNY,IAAKC,GACUA,EAAI9K,QAAQkK,EAAQ,CAACa,EAAKC,EAAYtG,IAASA,GAChDjK,QAEdwQ,OAAQvG,GAASA,EAAKgE,OAAS,GATzB,EAUX,C","sources":["webpack://judgeval/webpack/bootstrap","webpack://judgeval/webpack/runtime/define property getters","webpack://judgeval/webpack/runtime/hasOwnProperty shorthand","webpack://judgeval/webpack/runtime/make namespace object","webpack://judgeval/external commonjs2 \"@opentelemetry/exporter-trace-otlp-http\"","webpack://judgeval/./src/tracer/exporters/JudgmentSpanExporter.ts","webpack://judgeval/./src/tracer/exporters/NoOpSpanExporter.ts","webpack://judgeval/./src/tracer/OpenTelemetryKeys.ts","webpack://judgeval/external commonjs2 \"@opentelemetry/api\"","webpack://judgeval/./src/env.ts","webpack://judgeval/./src/internal/api/index.ts","webpack://judgeval/./src/utils/logger.ts","webpack://judgeval/./src/constants.ts","webpack://judgeval/./src/tracer/TracerConfiguration.ts","webpack://judgeval/./src/tracer/Tracer.ts","webpack://judgeval/./src/data/example.ts","webpack://judgeval/./src/data/example-params.ts","webpack://judgeval/./src/scorers/api-scorer.ts","webpack://judgeval/./src/scorers/base-scorer.ts","webpack://judgeval/./src/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.ts","webpack://judgeval/./src/scorers/api_scorers/prompt_scorer/base-prompt-scorer.ts","webpack://judgeval/./src/scorers/api_scorers/prompt_scorer/prompt-scorer.ts","webpack://judgeval/./src/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.ts","webpack://judgeval/./src/utils/annotate.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@opentelemetry/exporter-trace-otlp-http\");","import { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\n\nexport class JudgmentSpanExporter extends OTLPTraceExporter {\n constructor(\n endpoint: string,\n apiKey: string,\n organizationId: string,\n projectId: string,\n ) {\n if (!projectId || projectId.trim() === \"\") {\n throw new Error(\"projectId is required for JudgmentSpanExporter\");\n }\n\n super({\n url: endpoint,\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"X-Organization-Id\": organizationId,\n \"X-Project-Id\": projectId,\n },\n });\n }\n\n /**\n * Creates a new builder for constructing JudgmentSpanExporter instances.\n */\n public static builder(): JudgmentSpanExporterBuilder {\n return new JudgmentSpanExporterBuilder();\n }\n}\n\nexport class JudgmentSpanExporterBuilder {\n private _endpoint?: string;\n private _apiKey?: string;\n private _organizationId?: string;\n private _projectId?: string;\n\n constructor() {}\n\n /**\n * Sets the OTLP endpoint URL.\n */\n public endpoint(endpoint: string): this {\n this._endpoint = endpoint;\n return this;\n }\n\n /**\n * Sets the API key for authentication.\n */\n public apiKey(apiKey: string): this {\n this._apiKey = apiKey;\n return this;\n }\n\n /**\n * Sets the organization ID.\n */\n public organizationId(organizationId: string): this {\n this._organizationId = organizationId;\n return this;\n }\n\n /**\n * Sets the project ID.\n */\n public projectId(projectId: string): this {\n this._projectId = projectId;\n return this;\n }\n\n /**\n * Builds a new JudgmentSpanExporter with the current configuration.\n */\n public build(): JudgmentSpanExporter {\n if (!this._endpoint || this._endpoint.trim() === \"\") {\n throw new Error(\"Endpoint is required\");\n }\n if (!this._apiKey || this._apiKey.trim() === \"\") {\n throw new Error(\"API key is required\");\n }\n if (!this._organizationId || this._organizationId.trim() === \"\") {\n throw new Error(\"Organization ID is required\");\n }\n if (!this._projectId || this._projectId.trim() === \"\") {\n throw new Error(\"Project ID is required\");\n }\n\n return new JudgmentSpanExporter(\n this._endpoint,\n this._apiKey,\n this._organizationId,\n this._projectId,\n );\n }\n}\n","import { ExportResult } from \"@opentelemetry/core\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\n\n/**\n * A no-op span exporter that does nothing.\n * Used when project resolution fails or tracing is disabled.\n */\nexport class NoOpSpanExporter implements SpanExporter {\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n resultCallback({ code: 0 });\n }\n\n flush(): Promise<void> {\n return Promise.resolve();\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n}\n","export class OpenTelemetryKeys {\n public static readonly AttributeKeys = {\n JUDGMENT_SPAN_KIND: \"judgment.span_kind\",\n JUDGMENT_INPUT: \"judgment.input\",\n JUDGMENT_OUTPUT: \"judgment.output\",\n PENDING_TRACE_EVAL: \"judgment.pending_trace_eval\",\n } as const;\n\n public static readonly ResourceKeys = {\n JUDGMENT_PROJECT_ID: \"judgment.project_id\",\n } as const;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@opentelemetry/api\");","function getEnvVar(varName: string): string | null;\nfunction getEnvVar(varName: string, defaultValue: string): string;\nfunction getEnvVar(varName: string, defaultValue?: string): string | null {\n const value = process.env[varName];\n if (!value) {\n return defaultValue ?? null;\n }\n return value;\n}\n\nexport const JUDGMENT_API_KEY = getEnvVar(\"JUDGMENT_API_KEY\");\nexport const JUDGMENT_ORG_ID = getEnvVar(\"JUDGMENT_ORG_ID\");\nexport const JUDGMENT_API_URL = getEnvVar(\n \"JUDGMENT_API_URL\",\n \"https://api.judgmentlabs.ai\",\n);\nexport const JUDGMENT_DEFAULT_GPT_MODEL = getEnvVar(\n \"JUDGMENT_DEFAULT_GPT_MODEL\",\n \"gpt-4.1\",\n);\nexport const JUDGMENT_NO_COLOR = getEnvVar(\"JUDGMENT_NO_COLOR\");\n","/**\n * Auto-generated by scripts/generate-client.ts\n * DO NOT EDIT MANUALLY - This file is generated automatically\n */\nimport * as Models from \"./models\";\n\nexport class JudgmentApiClient {\n private baseUrl: string;\n private apiKey: string;\n private organizationId: string;\n\n constructor(baseUrl: string, apiKey: string, organizationId: string) {\n this.baseUrl = baseUrl;\n this.apiKey = apiKey;\n this.organizationId = organizationId;\n }\n\n private buildUrl(path: string): string {\n return this.baseUrl + path;\n }\n\n private buildHeaders(): Record<string, string> {\n if (!this.apiKey || !this.organizationId) {\n throw new Error(\"API key and organization ID cannot be null\");\n }\n return {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n \"X-Organization-Id\": this.organizationId,\n };\n }\n\n async addToRunEvalQueueExamples(\n payload: Models.ExampleEvaluationRun,\n ): Promise<void> {\n const url = this.buildUrl(\"/add_to_run_eval_queue/examples\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async addToRunEvalQueueTraces(\n payload: Models.TraceEvaluationRun,\n ): Promise<void> {\n const url = this.buildUrl(\"/add_to_run_eval_queue/traces\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async logEvalResults(payload: Models.EvalResults): Promise<void> {\n const url = this.buildUrl(\"/log_eval_results/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async fetchExperimentRun(payload: Models.EvalResultsFetch): Promise<void> {\n const url = this.buildUrl(\"/fetch_experiment_run/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async getEvaluationStatus(\n experiment_run_id: string,\n project_name: string,\n ): Promise<void> {\n const queryParams = new URLSearchParams();\n queryParams.set(\"experiment_run_id\", experiment_run_id);\n queryParams.set(\"project_name\", project_name);\n const url = this.buildUrl(\n \"/get_evaluation_status/\" +\n (queryParams.toString() ? \"?\" + queryParams.toString() : \"\"),\n );\n const response = await fetch(url, {\n method: \"GET\",\n headers: this.buildHeaders(),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async scorerExists(\n payload: Models.ScorerExistsRequest,\n ): Promise<Models.ScorerExistsResponse> {\n const url = this.buildUrl(\"/scorer_exists/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.ScorerExistsResponse;\n }\n\n async saveScorer(\n payload: Models.SavePromptScorerRequest,\n ): Promise<Models.SavePromptScorerResponse> {\n const url = this.buildUrl(\"/save_scorer/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.SavePromptScorerResponse;\n }\n\n async fetchScorers(\n payload: Models.FetchPromptScorersRequest,\n ): Promise<Models.FetchPromptScorersResponse> {\n const url = this.buildUrl(\"/fetch_scorers/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.FetchPromptScorersResponse;\n }\n\n async projectsResolve(\n payload: Models.ResolveProjectNameRequest,\n ): Promise<Models.ResolveProjectNameResponse> {\n const url = this.buildUrl(\"/projects/resolve/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.ResolveProjectNameResponse;\n }\n}\n","export class Logger {\n private static readonly RESET = \"\\x1b[0m\";\n private static readonly RED = \"\\x1b[31m\";\n private static readonly YELLOW = \"\\x1b[33m\";\n private static readonly GRAY = \"\\x1b[90m\";\n\n public static Level = {\n DEBUG: 0,\n INFO: 1,\n WARNING: 2,\n ERROR: 3,\n CRITICAL: 4,\n } as const;\n\n private static initialized = false;\n private static currentLevel: number = Logger.Level.INFO;\n private static useColor = true;\n\n private static initialize(): void {\n if (!Logger.initialized) {\n const noColor = process.env.JUDGMENT_NO_COLOR;\n Logger.useColor = !noColor && process.stdout.isTTY;\n Logger.initialized = true;\n }\n }\n\n public static setLevel(level: number): void {\n Logger.currentLevel = level;\n }\n\n public static setUseColor(useColor: boolean): void {\n Logger.useColor = useColor;\n }\n\n private static log(level: number, message: string): void {\n Logger.initialize();\n\n if (level < Logger.currentLevel) {\n return;\n }\n\n const timestamp = new Date()\n .toISOString()\n .replace(\"T\", \" \")\n .substring(0, 19);\n const levelName =\n Object.keys(Logger.Level).find(\n (key) => Logger.Level[key as keyof typeof Logger.Level] === level,\n ) || \"UNKNOWN\";\n let formattedMessage = `${timestamp} - judgeval - ${levelName} - ${message}`;\n\n if (Logger.useColor) {\n const color =\n level === Logger.Level.DEBUG || level === Logger.Level.INFO\n ? Logger.GRAY\n : level === Logger.Level.WARNING\n ? Logger.YELLOW\n : Logger.RED;\n formattedMessage = `${color}${formattedMessage}${Logger.RESET}`;\n }\n\n const output =\n level >= Logger.Level.ERROR ? process.stderr : process.stdout;\n output.write(formattedMessage + \"\\n\");\n }\n\n public static debug(message: string): void {\n Logger.log(Logger.Level.DEBUG, message);\n }\n\n public static info(message: string): void {\n Logger.log(Logger.Level.INFO, message);\n }\n\n public static warning(message: string): void {\n Logger.log(Logger.Level.WARNING, message);\n }\n\n public static warn(message: string): void {\n Logger.log(Logger.Level.WARNING, message);\n }\n\n public static error(message: string): void {\n Logger.log(Logger.Level.ERROR, message);\n }\n\n public static critical(message: string): void {\n Logger.log(Logger.Level.CRITICAL, message);\n }\n}\n","export const TRACER_NAME = \"judgeval-tracer\";\n","import { TRACER_NAME } from \"../constants\";\nimport { JUDGMENT_API_KEY, JUDGMENT_API_URL, JUDGMENT_ORG_ID } from \"../env\";\n\n/**\n * Configuration for the Judgment Tracer that controls how tracing and evaluation behave.\n *\n * This class encapsulates all configuration parameters needed to initialize a Tracer.\n *\n * @example\n * ```typescript\n * const config = TracerConfiguration.builder()\n * .projectName(\"my-project\")\n * .apiKey(\"your-api-key\")\n * .organizationId(\"your-org-id\")\n * .enableEvaluation(true)\n * .build();\n *\n * const tracer = Tracer.createWithConfiguration(config);\n * ```\n */\nexport class TracerConfiguration {\n constructor(\n public readonly projectName: string,\n public readonly apiKey: string,\n public readonly organizationId: string,\n public readonly apiUrl: string,\n public readonly enableEvaluation: boolean,\n public readonly tracerName: string = TRACER_NAME,\n ) {}\n\n /**\n * Creates a default configuration with the given project name.\n *\n * This method uses default values from environment variables:\n * - API Key: JUDGMENT_API_KEY\n * - Organization ID: JUDGMENT_ORG_ID\n * - API URL: JUDGMENT_API_URL\n * - Evaluation: enabled\n *\n * @param projectName the name of the project\n * @returns a new TracerConfiguration with default values\n * @throws Error if project name is null or empty\n */\n public static createDefault(projectName: string): TracerConfiguration {\n return new TracerConfigurationBuilder().projectName(projectName).build();\n }\n\n public static builder(): TracerConfigurationBuilder {\n return new TracerConfigurationBuilder();\n }\n}\n\n/**\n * Builder for creating TracerConfiguration instances.\n *\n * @example\n * ```typescript\n * const config = TracerConfiguration.builder()\n * .projectName(\"my-project\")\n * .apiKey(\"custom-api-key\")\n * .organizationId(\"custom-org-id\")\n * .apiUrl(\"https://custom-api.judgmentlabs.ai\")\n * .enableEvaluation(false)\n * .build();\n * ```\n */\nexport class TracerConfigurationBuilder {\n private _projectName?: string;\n private _apiKey: string = JUDGMENT_API_KEY || \"\";\n private _organizationId: string = JUDGMENT_ORG_ID || \"\";\n private _apiUrl: string = JUDGMENT_API_URL || \"\";\n private _enableEvaluation: boolean = true;\n private _tracerName: string = TRACER_NAME;\n\n public projectName(projectName: string): this {\n this._projectName = projectName;\n return this;\n }\n\n public apiKey(apiKey: string): this {\n this._apiKey = apiKey;\n return this;\n }\n\n public organizationId(organizationId: string): this {\n this._organizationId = organizationId;\n return this;\n }\n\n public apiUrl(apiUrl: string): this {\n this._apiUrl = apiUrl;\n return this;\n }\n\n public enableEvaluation(enableEvaluation: boolean): this {\n this._enableEvaluation = enableEvaluation;\n return this;\n }\n\n public tracerName(tracerName: string): this {\n this._tracerName = tracerName;\n return this;\n }\n\n public build(): TracerConfiguration {\n if (!this._projectName) {\n throw new Error(\"Project name is required\");\n }\n\n if (!this._apiKey) {\n throw new Error(\"API key is required\");\n }\n\n if (!this._organizationId) {\n throw new Error(\"Organization ID is required\");\n }\n\n if (!this._apiUrl) {\n throw new Error(\"API URL is required\");\n }\n\n return new TracerConfiguration(\n this._projectName,\n this._apiKey,\n this._organizationId,\n this._apiUrl,\n this._enableEvaluation,\n this._tracerName,\n );\n }\n}\n","import { trace } from \"@opentelemetry/api\";\nimport { JUDGMENT_DEFAULT_GPT_MODEL } from \"../env\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport {\n ExampleEvaluationRun,\n Example as ExampleModel,\n ResolveProjectNameRequest,\n} from \"../internal/api/models\";\nimport { BaseScorer } from \"../scorers/base-scorer\";\nimport { Logger } from \"../utils/logger\";\nimport { JudgmentSpanExporter, NoOpSpanExporter } from \"./exporters\";\nimport { OpenTelemetryKeys } from \"./OpenTelemetryKeys\";\nimport { TracerConfiguration } from \"./TracerConfiguration\";\n\nexport type Serializer = (obj: unknown) => string;\n\nexport class Tracer {\n private readonly configuration: TracerConfiguration;\n private readonly apiClient: JudgmentApiClient;\n private readonly serializer: Serializer;\n private projectId: string | null = null;\n private projectIdPromise: Promise<string | null>;\n\n public getConfiguration(): TracerConfiguration {\n return this.configuration;\n }\n\n public getProjectId(): string | null {\n return this.projectId;\n }\n\n public getSerializer(): Serializer {\n return this.serializer;\n }\n\n constructor(\n configuration: TracerConfiguration,\n apiClient: JudgmentApiClient,\n serializer: Serializer,\n ) {\n this.configuration = configuration;\n this.apiClient = apiClient;\n this.serializer = serializer;\n this.projectIdPromise = this.resolveProjectId();\n }\n\n private async resolveProjectId(): Promise<string | null> {\n try {\n Logger.info(\n `Resolving project ID for project: ${this.configuration.projectName}`,\n );\n\n const request: ResolveProjectNameRequest = {\n project_name: this.configuration.projectName,\n } as const;\n\n const response = await this.apiClient.projectsResolve(request);\n this.projectId = response.project_id?.toString() || null;\n\n if (this.projectId) {\n Logger.info(`Successfully resolved project ID: ${this.projectId}`);\n } else {\n Logger.warn(\n `Project ID not found for project: ${this.configuration.projectName}`,\n );\n }\n\n return this.projectId;\n } catch (error) {\n this.projectId = null;\n return null;\n }\n }\n\n public static builder(): TracerBuilder {\n return new TracerBuilder();\n }\n\n public static createDefault(projectName: string): Tracer {\n return TracerBuilder.builder()\n .configuration(TracerConfiguration.createDefault(projectName))\n .build();\n }\n\n public static createWithConfiguration(\n configuration: TracerConfiguration,\n ): Tracer {\n return TracerBuilder.builder().configuration(configuration).build();\n }\n\n public async getSpanExporter(): Promise<\n JudgmentSpanExporter | NoOpSpanExporter\n > {\n const projectId = await this.projectIdPromise;\n if (!projectId) {\n Logger.error(\n \"Failed to resolve project \" +\n this.configuration.projectName +\n \", please create it first at https://app.judgmentlabs.ai/org/\" +\n this.configuration.organizationId +\n \"/projects. Skipping Judgment export.\",\n );\n return new NoOpSpanExporter();\n }\n return this.createJudgmentSpanExporter(projectId);\n }\n\n public setSpanKind(kind: string | null): void {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setSpanKind\");\n return;\n }\n if (kind !== null) {\n currentSpan.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_SPAN_KIND,\n kind,\n );\n }\n }\n\n public setAttribute(key: string, value: unknown, type?: any): void {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setAttribute\");\n return;\n }\n currentSpan.setAttribute(key, this.serializer(value));\n }\n\n public setLLMSpan(): void {\n this.setSpanKind(\"llm\");\n }\n\n public setToolSpan(): void {\n this.setSpanKind(\"tool\");\n }\n\n public setGeneralSpan(): void {\n this.setSpanKind(\"span\");\n }\n\n public setAttributes(attributes: Record<string, unknown>): void {\n if (!attributes) {\n return;\n }\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setAttributes\");\n return;\n }\n for (const [key, value] of Object.entries(attributes)) {\n currentSpan.setAttribute(key, this.serializer(value));\n }\n }\n\n public setInput(input: unknown, type?: any): void {\n this.setAttribute(OpenTelemetryKeys.AttributeKeys.JUDGMENT_INPUT, input);\n }\n\n public setOutput(output: unknown, type?: any): void {\n this.setAttribute(OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT, output);\n }\n\n public asyncEvaluate(\n scorer: BaseScorer,\n example: ExampleModel,\n model?: string,\n ): void {\n if (!this.configuration.enableEvaluation) {\n return;\n }\n\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping asyncEvaluate\");\n return;\n }\n if (!currentSpan.isRecording()) {\n Logger.warn(\"Active span is not recording, skipping asyncEvaluate\");\n return;\n }\n\n const spanContext = currentSpan.spanContext();\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n Logger.info(\n `asyncEvaluate: project=${this.configuration.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorer.name}`,\n );\n\n const evaluationRun = this.createEvaluationRun(\n scorer,\n example,\n model,\n traceId,\n spanId,\n );\n this.enqueueEvaluation(evaluationRun);\n }\n\n public asyncTraceEvaluate(scorer: BaseScorer, model?: string): void {\n if (!this.configuration.enableEvaluation) {\n return;\n }\n\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping asyncTraceEvaluate\");\n return;\n }\n if (!currentSpan.isRecording()) {\n Logger.warn(\"Active span is not recording, skipping asyncTraceEvaluate\");\n return;\n }\n\n const spanContext = currentSpan.spanContext();\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n Logger.info(\n `asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorer.name}`,\n );\n\n try {\n const traceEvaluationRun = this.createTraceEvaluationRun(\n scorer,\n model,\n traceId,\n spanId,\n );\n const traceEvalJson = this.serializer(traceEvaluationRun);\n currentSpan.setAttribute(\n OpenTelemetryKeys.AttributeKeys.PENDING_TRACE_EVAL,\n traceEvalJson,\n );\n } catch (error) {\n Logger.error(\n `Failed to serialize trace evaluation: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private createTraceEvaluationRun(\n scorer: BaseScorer,\n model: string | undefined,\n traceId: string,\n spanId: string,\n ): any {\n const evalName = `async_trace_evaluate_${spanId || Date.now()}`;\n const modelName = model || JUDGMENT_DEFAULT_GPT_MODEL;\n\n const scorerConfig = scorer.toTransport();\n\n return {\n project_name: this.configuration.projectName,\n eval_name: evalName,\n scorer: scorerConfig,\n model: modelName,\n organization_id: this.configuration.organizationId,\n trace_id: traceId,\n trace_span_id: spanId,\n };\n }\n\n private createJudgmentSpanExporter(projectId: string): JudgmentSpanExporter {\n const endpoint = this.configuration.apiUrl.endsWith(\"/\")\n ? `${this.configuration.apiUrl}otel/v1/traces`\n : `${this.configuration.apiUrl}/otel/v1/traces`;\n\n return new JudgmentSpanExporter(\n endpoint,\n this.configuration.apiKey,\n this.configuration.organizationId,\n projectId,\n );\n }\n\n private createEvaluationRun(\n scorer: BaseScorer,\n example: ExampleModel,\n model: string | undefined,\n traceId: string,\n spanId: string,\n ): ExampleEvaluationRun {\n const runId = `async_evaluate_${spanId || Date.now()}`;\n const modelName = model || JUDGMENT_DEFAULT_GPT_MODEL;\n\n const scorerConfig = scorer.toTransport();\n\n const evaluationRun: ExampleEvaluationRun = {\n project_name: this.configuration.projectName,\n eval_name: runId,\n examples: [example],\n custom_scorers: [],\n judgment_scorers: [scorerConfig],\n model: modelName,\n trace_id: traceId,\n trace_span_id: spanId,\n };\n\n return evaluationRun;\n }\n\n private async enqueueEvaluation(\n evaluationRun: ExampleEvaluationRun,\n ): Promise<void> {\n try {\n await this.apiClient.addToRunEvalQueueExamples(evaluationRun);\n Logger.info(`Enqueuing evaluation run: ${evaluationRun.eval_name}`);\n } catch (error) {\n Logger.error(\n `Failed to enqueue evaluation run: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n}\n\nexport class TracerBuilder {\n private config?: TracerConfiguration;\n private _apiClient?: JudgmentApiClient;\n private _serializer: Serializer = JSON.stringify;\n\n public static builder(): TracerBuilder {\n return new TracerBuilder();\n }\n\n public configuration(configuration: TracerConfiguration): this {\n this.config = configuration;\n return this;\n }\n\n public apiClient(apiClient: JudgmentApiClient): this {\n this._apiClient = apiClient;\n return this;\n }\n\n public serializer(serializer: Serializer): this {\n this._serializer = serializer;\n return this;\n }\n\n public build(): Tracer {\n if (!this.config) {\n throw new Error(\"Configuration is required\");\n }\n\n const client =\n this._apiClient ||\n new JudgmentApiClient(\n this.config.apiUrl,\n this.config.apiKey,\n this.config.organizationId,\n );\n\n return new Tracer(this.config, client, this._serializer);\n }\n}\n","import { Example as ExampleModel } from \"../internal/api/models/Example\";\n\nexport type Example<T extends Record<string, any> = Record<string, any>> =\n ExampleModel & T;\n\nexport function createExample<T extends Record<string, any>>(\n properties: T,\n): Example<T> {\n const example: Example<T> = {\n example_id: undefined,\n created_at: new Date().toISOString(),\n name: null,\n ...properties,\n } as Example<T>;\n\n return example;\n}\n","export enum ExampleParams {\n INPUT = \"input\",\n ACTUAL_OUTPUT = \"actual_output\",\n EXPECTED_OUTPUT = \"expected_output\",\n CONTEXT = \"context\",\n RETRIEVAL_CONTEXT = \"retrieval_context\",\n TOOLS_CALLED = \"tools_called\",\n EXPECTED_TOOLS = \"expected_tools\",\n ADDITIONAL_METADATA = \"additional_metadata\",\n}\n\nexport type ExampleParamKeys = keyof typeof ExampleParams;\nexport type ExampleParamValues = `${ExampleParams}`;\n","import { BaseScorer, createBaseScorer } from \"./base-scorer\";\n\nexport enum APIScorerType {\n PROMPT_SCORER = \"Prompt Scorer\",\n TRACE_PROMPT_SCORER = \"Trace Prompt Scorer\",\n FAITHFULNESS = \"Faithfulness\",\n ANSWER_RELEVANCY = \"Answer Relevancy\",\n ANSWER_CORRECTNESS = \"Answer Correctness\",\n INSTRUCTION_ADHERENCE = \"Instruction Adherence\",\n EXECUTION_ORDER = \"Execution Order\",\n TOOL_ORDER = \"Tool Order\",\n CLASSIFIER = \"Classifier\",\n TOOL_DEPENDENCY = \"Tool Dependency\",\n CUSTOM = \"Custom\",\n}\n\nexport type APIScorer<\n T extends APIScorerType = APIScorerType,\n P extends readonly string[] = readonly string[],\n> = BaseScorer & {\n scoreType: T;\n requiredParams: P;\n setThreshold: (threshold: number) => void;\n getScoreType: () => T;\n setRequiredParams: (params: P) => void;\n};\n\nexport function createAPIScorer<\n T extends APIScorerType,\n P extends readonly string[],\n>(scoreType: T, requiredParams: P): APIScorer<T, P> {\n const scorer = createBaseScorer() as APIScorer<T, P>;\n\n scorer.scoreType = scoreType;\n scorer.name = scoreType;\n scorer.score_type = scoreType;\n scorer.requiredParams = requiredParams;\n\n scorer.setThreshold = (threshold: number) => {\n if (threshold < 0 || threshold > 1) {\n throw new Error(`Threshold must be between 0 and 1, got: ${threshold}`);\n }\n scorer.threshold = threshold;\n };\n\n scorer.getScoreType = () => {\n return scorer.scoreType;\n };\n\n scorer.setRequiredParams = (params: P) => {\n scorer.requiredParams = params;\n };\n\n return scorer;\n}\n","import { ScorerConfig } from \"../internal/api/models\";\nimport { BaseScorer as BaseScorerModel } from \"../internal/api/models/BaseScorer\";\n\nexport type BaseScorer = BaseScorerModel & {\n addModel: (model: string) => void;\n successCheck: () => boolean;\n getRequiredParams: () => string[];\n toTransport: () => ScorerConfig;\n};\n\nexport function createBaseScorer(): BaseScorer {\n const scorer: BaseScorer = {\n score_type: \"\",\n class_name: \"\",\n name: \"\",\n addModel: (model: string) => {\n scorer.model = model;\n },\n successCheck: () => {\n if (scorer.error != null) {\n return false;\n }\n if (scorer.score == null) {\n return false;\n }\n const threshold = scorer.threshold ?? 0.5;\n const score = scorer.score;\n return threshold != null && score != null && score >= threshold;\n },\n getRequiredParams: () => {\n return [];\n },\n toTransport: () => {\n return {\n score_type: scorer.score_type,\n name: scorer.name,\n threshold: scorer.threshold ?? 0.5,\n strict_mode: scorer.strict_mode ?? false,\n required_params: [],\n kwargs: {},\n };\n },\n };\n\n scorer.class_name = \"BaseScorer\";\n scorer.name = scorer.class_name;\n if (scorer.strict_mode === true) {\n scorer.threshold = 1.0;\n }\n\n return scorer;\n}\n","import {\n JUDGMENT_API_KEY,\n JUDGMENT_API_URL,\n JUDGMENT_ORG_ID,\n} from \"../../../env\";\nimport { JudgmentApiClient } from \"../../../internal/api\";\n\nexport class JudgmentAPIError extends Error {\n constructor(\n public statusCode: number,\n message: string,\n ) {\n super(message);\n this.name = \"JudgmentAPIError\";\n }\n}\n\nexport async function pushPromptScorer(\n name: string,\n prompt: string,\n threshold: number,\n options?: Record<string, number> | null,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n isTrace?: boolean,\n): Promise<string> {\n if (!JUDGMENT_API_URL || !judgmentApiKey || !organizationId) {\n throw new Error(\"Missing required API credentials\");\n }\n\n const client = new JudgmentApiClient(\n JUDGMENT_API_URL,\n judgmentApiKey,\n organizationId,\n );\n const response = await client.saveScorer({\n name,\n prompt,\n threshold,\n options,\n is_trace: isTrace,\n });\n return response.name;\n}\n\nexport async function fetchPromptScorer(\n name: string,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n) {\n if (!JUDGMENT_API_URL || !judgmentApiKey || !organizationId) {\n throw new Error(\"Missing required API credentials\");\n }\n\n const client = new JudgmentApiClient(\n JUDGMENT_API_URL,\n judgmentApiKey,\n organizationId,\n );\n const response = await client.fetchScorers({ names: [name] });\n if (response.scorers.length === 0) {\n throw new JudgmentAPIError(404, `Scorer with name ${name} not found`);\n }\n const { created_at, updated_at, ...config } = response.scorers[0];\n return config;\n}\n\nexport async function scorerExists(\n name: string,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n): Promise<boolean> {\n if (!JUDGMENT_API_URL || !judgmentApiKey || !organizationId) {\n throw new Error(\"Missing required API credentials\");\n }\n\n const client = new JudgmentApiClient(\n JUDGMENT_API_URL,\n judgmentApiKey,\n organizationId,\n );\n const response = await client.scorerExists({ name });\n return response.exists;\n}\n","import { JUDGMENT_API_KEY, JUDGMENT_ORG_ID } from \"../../../env\";\nimport { ScorerConfig } from \"../../../internal/api/models\";\nimport { APIScorer, APIScorerType } from \"../../api-scorer\";\nimport {\n fetchPromptScorer,\n JudgmentAPIError,\n pushPromptScorer,\n scorerExists,\n} from \"./prompt-scorer-utils\";\n\nexport abstract class BasePromptScorer\n implements APIScorer<APIScorerType, readonly string[]>\n{\n public scoreType: APIScorerType;\n public name: string;\n public prompt: string;\n public threshold: number;\n public options?: Record<string, number> | null;\n public judgmentApiKey: string;\n public organizationId: string;\n public requiredParams: readonly string[];\n public score_type: string;\n public class_name: string;\n public model?: string;\n public score?: number;\n public error?: string | null;\n public strict_mode?: boolean;\n\n constructor(\n scoreType: APIScorerType,\n name: string,\n prompt: string,\n threshold: number,\n requiredParams: readonly string[],\n options?: Record<string, number> | null,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n ) {\n this.scoreType = scoreType;\n this.name = name;\n this.prompt = prompt;\n this.threshold = threshold;\n this.requiredParams = requiredParams;\n this.options = options;\n this.judgmentApiKey = judgmentApiKey;\n this.organizationId = organizationId;\n this.score_type = scoreType;\n this.class_name = \"BasePromptScorer\";\n this.model = undefined;\n this.score = undefined;\n this.error = null;\n this.strict_mode = false;\n }\n score_breakdown?: Record<string, any> | null | undefined;\n reason?: string | null | undefined;\n using_native_model?: boolean | null | undefined;\n success?: boolean | null | undefined;\n model_client?: any;\n additional_metadata?: Record<string, any> | null | undefined;\n user?: string | null | undefined;\n server_hosted?: boolean | undefined;\n\n static async get<T extends BasePromptScorer>(\n this: new (...args: any[]) => T,\n name: string,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n ): Promise<T> {\n const config = await fetchPromptScorer(\n name,\n judgmentApiKey,\n organizationId,\n );\n\n const isTrace = config.is_trace === true;\n const expectedIsTrace =\n this.prototype.scoreType === APIScorerType.TRACE_PROMPT_SCORER;\n\n if (isTrace !== expectedIsTrace) {\n throw new JudgmentAPIError(\n 400,\n `Scorer with name ${name} is not a ${this.name}`,\n );\n }\n\n const scoreType = isTrace\n ? APIScorerType.TRACE_PROMPT_SCORER\n : APIScorerType.PROMPT_SCORER;\n\n return new this(\n scoreType,\n config.name, // Use config.name instead of name parameter\n config.prompt,\n config.threshold,\n [],\n config.options,\n judgmentApiKey,\n organizationId,\n );\n }\n\n static async create<T extends BasePromptScorer>(\n this: new (...args: any[]) => T,\n name: string,\n prompt: string,\n threshold: number = 0.5,\n options?: Record<string, number> | null,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n ): Promise<T> {\n if (await scorerExists(name, judgmentApiKey, organizationId)) {\n throw new JudgmentAPIError(\n 400,\n `Scorer with name ${name} already exists. Either use the existing scorer with the get() method or use a new name.`,\n );\n }\n\n const isTrace =\n this.prototype.scoreType === APIScorerType.TRACE_PROMPT_SCORER;\n const scoreType = isTrace\n ? APIScorerType.TRACE_PROMPT_SCORER\n : APIScorerType.PROMPT_SCORER;\n\n await pushPromptScorer(\n name,\n prompt,\n threshold,\n options,\n judgmentApiKey,\n organizationId,\n isTrace,\n );\n\n return new this(\n scoreType,\n name,\n prompt,\n threshold,\n [],\n options,\n judgmentApiKey,\n organizationId,\n );\n }\n\n async updateThreshold(threshold: number): Promise<void> {\n this.setThreshold(threshold);\n await this.pushPromptScorer();\n }\n\n async setPrompt(prompt: string): Promise<void> {\n this.prompt = prompt;\n await this.pushPromptScorer();\n }\n\n async setOptions(options: Record<string, number> | null): Promise<void> {\n this.options = options;\n await this.pushPromptScorer();\n }\n\n async appendToPrompt(promptAddition: string): Promise<void> {\n this.prompt += promptAddition;\n await this.pushPromptScorer();\n }\n\n getThreshold(): number {\n return this.threshold;\n }\n\n getPrompt(): string {\n return this.prompt;\n }\n\n getOptions(): Record<string, number> | null {\n return this.options ? { ...this.options } : null;\n }\n\n getName(): string {\n return this.name;\n }\n\n getConfig(): Record<string, any> {\n return {\n name: this.name,\n prompt: this.prompt,\n threshold: this.threshold,\n options: this.options,\n };\n }\n\n async pushPromptScorer(): Promise<void> {\n await pushPromptScorer(\n this.name,\n this.prompt,\n this.threshold,\n this.options,\n this.judgmentApiKey,\n this.organizationId,\n );\n }\n\n toString(): string {\n return `${this.constructor.name}(name=${this.name}, prompt=${\n this.prompt\n }, threshold=${this.threshold}, options=${JSON.stringify(this.options)})`;\n }\n\n addModel(model: string): void {\n this.model = model;\n }\n\n successCheck(): boolean {\n if (this.error != null) {\n return false;\n }\n if (this.score == null) {\n return false;\n }\n const threshold = this.threshold ?? 0.5;\n const score = this.score;\n return threshold != null && score != null && score >= threshold;\n }\n\n getRequiredParams(): string[] {\n if (Array.isArray(this.requiredParams)) {\n return [...this.requiredParams];\n }\n return [];\n }\n\n setThreshold(threshold: number): void {\n if (threshold < 0 || threshold > 1) {\n throw new Error(`Threshold must be between 0 and 1, got: ${threshold}`);\n }\n this.threshold = threshold;\n }\n\n getScoreType(): APIScorerType {\n return this.scoreType;\n }\n\n setRequiredParams(params: readonly string[]): void {\n this.requiredParams = params;\n }\n\n toTransport(): ScorerConfig {\n return {\n score_type: this.getScoreType(),\n name: this.getName(),\n threshold: this.getThreshold(),\n strict_mode: this.strict_mode ?? false,\n required_params: this.getRequiredParams(),\n kwargs: {\n prompt: this.getPrompt(),\n ...(this.getOptions() ? { options: this.getOptions() } : {}),\n },\n };\n }\n}\n","import { JUDGMENT_API_KEY, JUDGMENT_ORG_ID } from \"../../../env\";\nimport { APIScorerType } from \"../../api-scorer\";\nimport { BasePromptScorer } from \"./base-prompt-scorer\";\nexport {\n fetchPromptScorer,\n JudgmentAPIError,\n pushPromptScorer,\n scorerExists,\n} from \"./prompt-scorer-utils\";\n\nexport class PromptScorer extends BasePromptScorer {\n constructor(\n scoreType: APIScorerType,\n name: string,\n prompt: string,\n threshold: number,\n requiredParams: readonly string[] = [],\n options?: Record<string, number> | null,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n ) {\n super(\n scoreType,\n name,\n prompt,\n threshold,\n requiredParams,\n options,\n judgmentApiKey,\n organizationId,\n );\n }\n}\n","import { JUDGMENT_API_KEY, JUDGMENT_ORG_ID } from \"../../../env\";\nimport { APIScorerType } from \"../../api-scorer\";\nimport { BasePromptScorer } from \"./base-prompt-scorer\";\n\nexport class TracePromptScorer extends BasePromptScorer {\n constructor(\n scoreType: APIScorerType,\n name: string,\n prompt: string,\n threshold: number,\n requiredParams: readonly string[] = [],\n options?: Record<string, number> | null,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\"\n ) {\n super(\n scoreType,\n name,\n prompt,\n threshold,\n requiredParams,\n options,\n judgmentApiKey,\n organizationId\n );\n }\n}\n","// Adopted from https://github.com/angular/angular.js/blob/master/src/auto/injector.js\n\nconst ARROW_ARG = /^([^(]+?)=>/;\nconst FN_ARGS = /^[^(]*\\(\\s*([^)]*)\\)/m;\nconst FN_ARG_SPLIT = /,/;\nconst FN_ARG = /^\\s*(_?)(\\S+?)\\1\\s*$/;\nconst STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/gm;\n\nfunction stringifyFn(fn: Function): string {\n return Function.prototype.toString.call(fn);\n}\n\nfunction extractArgs(fn: Function): RegExpMatchArray | null {\n const fnText = stringifyFn(fn).replace(STRIP_COMMENTS, \"\");\n return fnText.match(ARROW_ARG) || fnText.match(FN_ARGS);\n}\n\nexport function parseFunctionArgs(fn: Function): string[] {\n const args = extractArgs(fn);\n if (!args || !args[1]) {\n return [];\n }\n\n return args[1]\n .split(FN_ARG_SPLIT)\n .map((arg) => {\n const match = arg.replace(FN_ARG, (all, underscore, name) => name);\n return match.trim();\n })\n .filter((name) => name.length > 0);\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","require","JudgmentSpanExporter","OTLPTraceExporter","constructor","endpoint","apiKey","organizationId","projectId","trim","Error","super","url","headers","Authorization","builder","JudgmentSpanExporterBuilder","this","_endpoint","_apiKey","_organizationId","_projectId","build","NoOpSpanExporter","spans","resultCallback","code","flush","Promise","resolve","shutdown","OpenTelemetryKeys","AttributeKeys","JUDGMENT_SPAN_KIND","JUDGMENT_INPUT","JUDGMENT_OUTPUT","PENDING_TRACE_EVAL","ResourceKeys","JUDGMENT_PROJECT_ID","getEnvVar","varName","defaultValue","process","env","JUDGMENT_API_KEY","JUDGMENT_ORG_ID","JUDGMENT_API_URL","JUDGMENT_DEFAULT_GPT_MODEL","JUDGMENT_NO_COLOR","JudgmentApiClient","baseUrl","buildUrl","path","buildHeaders","addToRunEvalQueueExamples","payload","response","fetch","method","body","JSON","stringify","ok","status","text","addToRunEvalQueueTraces","logEvalResults","fetchExperimentRun","getEvaluationStatus","experiment_run_id","project_name","queryParams","URLSearchParams","set","toString","scorerExists","json","saveScorer","fetchScorers","projectsResolve","Logger","initialize","initialized","noColor","useColor","stdout","isTTY","setLevel","level","currentLevel","setUseColor","log","message","formattedMessage","Date","toISOString","replace","substring","keys","Level","find","DEBUG","INFO","GRAY","WARNING","YELLOW","RED","RESET","ERROR","stderr","write","debug","info","warning","warn","error","critical","CRITICAL","TRACER_NAME","TracerConfiguration","projectName","apiUrl","enableEvaluation","tracerName","createDefault","TracerConfigurationBuilder","_apiUrl","_enableEvaluation","_tracerName","_projectName","Tracer","getConfiguration","configuration","getProjectId","getSerializer","serializer","apiClient","projectIdPromise","resolveProjectId","request","project_id","TracerBuilder","createWithConfiguration","getSpanExporter","createJudgmentSpanExporter","setSpanKind","kind","currentSpan","trace","getActiveSpan","setAttribute","type","setLLMSpan","setToolSpan","setGeneralSpan","setAttributes","attributes","entries","setInput","input","setOutput","output","asyncEvaluate","scorer","example","model","isRecording","spanContext","traceId","spanId","name","evaluationRun","createEvaluationRun","enqueueEvaluation","asyncTraceEvaluate","traceEvaluationRun","createTraceEvaluationRun","traceEvalJson","String","evalName","now","modelName","scorerConfig","toTransport","eval_name","organization_id","trace_id","trace_span_id","endsWith","runId","examples","custom_scorers","judgment_scorers","_serializer","config","_apiClient","client","createExample","properties","example_id","undefined","created_at","ExampleParams","APIScorerType","createBaseScorer","score_type","class_name","addModel","successCheck","score","threshold","getRequiredParams","strict_mode","required_params","kwargs","createAPIScorer","scoreType","requiredParams","setThreshold","getScoreType","setRequiredParams","params","JudgmentAPIError","statusCode","async","pushPromptScorer","prompt","options","judgmentApiKey","isTrace","is_trace","fetchPromptScorer","names","scorers","length","updated_at","exists","BasePromptScorer","TRACE_PROMPT_SCORER","PROMPT_SCORER","create","updateThreshold","setPrompt","setOptions","appendToPrompt","promptAddition","getThreshold","getPrompt","getOptions","getName","getConfig","Array","isArray","PromptScorer","TracePromptScorer","ARROW_ARG","FN_ARGS","FN_ARG_SPLIT","FN_ARG","STRIP_COMMENTS","parseFunctionArgs","fn","args","fnText","Function","stringifyFn","match","extractArgs","split","map","arg","all","underscore","filter"],"sourceRoot":""}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{OTLPTraceExporter as t}from"@opentelemetry/exporter-trace-otlp-http";import{trace as e}from"@opentelemetry/api";class r extends t{constructor(t,e,r,i){if(!i||""===i.trim())throw new Error("projectId is required for JudgmentSpanExporter");super({url:t,headers:{Authorization:`Bearer ${e}`,"X-Organization-Id":r,"X-Project-Id":i}})}static builder(){return new i}}class i{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 new Error("Endpoint is required");if(!this._apiKey||""===this._apiKey.trim())throw new Error("API key is required");if(!this._organizationId||""===this._organizationId.trim())throw new Error("Organization ID is required");if(!this._projectId||""===this._projectId.trim())throw new Error("Project ID is required");return new r(this._endpoint,this._apiKey,this._organizationId,this._projectId)}}class s{export(t,e){e({code:0})}flush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}class n{}function o(t,e){return process.env[t]||(e??null)}n.AttributeKeys={JUDGMENT_SPAN_KIND:"judgment.span_kind",JUDGMENT_INPUT:"judgment.input",JUDGMENT_OUTPUT:"judgment.output",PENDING_TRACE_EVAL:"judgment.pending_trace_eval"},n.ResourceKeys={JUDGMENT_PROJECT_ID:"judgment.project_id"};const a=o("JUDGMENT_API_KEY"),c=o("JUDGMENT_ORG_ID"),u=o("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),h=o("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),l=o("JUDGMENT_NO_COLOR");class d{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 new 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){const 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 new Error(`HTTP Error: ${r.status} - ${await r.text()}`)}async addToRunEvalQueueTraces(t){const 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 new Error(`HTTP Error: ${r.status} - ${await r.text()}`)}async logEvalResults(t){const e=this.buildUrl("/log_eval_results/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw new Error(`HTTP Error: ${r.status} - ${await r.text()}`)}async fetchExperimentRun(t){const e=this.buildUrl("/fetch_experiment_run/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw new Error(`HTTP Error: ${r.status} - ${await r.text()}`)}async getEvaluationStatus(t,e){const r=new URLSearchParams;r.set("experiment_run_id",t),r.set("project_name",e);const i=this.buildUrl("/get_evaluation_status/"+(r.toString()?"?"+r.toString():"")),s=await fetch(i,{method:"GET",headers:this.buildHeaders()});if(!s.ok)throw new Error(`HTTP Error: ${s.status} - ${await s.text()}`)}async scorerExists(t){const e=this.buildUrl("/scorer_exists/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw new Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async saveScorer(t){const e=this.buildUrl("/save_scorer/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw new Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchScorers(t){const e=this.buildUrl("/fetch_scorers/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw new Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async projectsResolve(t){const e=this.buildUrl("/projects/resolve/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw new Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}}class p{static initialize(){if(!p.initialized){const t=process.env.JUDGMENT_NO_COLOR;p.useColor=!t&&process.stdout.isTTY,p.initialized=!0}}static setLevel(t){p.currentLevel=t}static setUseColor(t){p.useColor=t}static log(t,e){if(p.initialize(),t<p.currentLevel)return;let r=`${(new Date).toISOString().replace("T"," ").substring(0,19)} - judgeval - ${Object.keys(p.Level).find(e=>p.Level[e]===t)||"UNKNOWN"} - ${e}`;p.useColor&&(r=`${t===p.Level.DEBUG||t===p.Level.INFO?p.GRAY:t===p.Level.WARNING?p.YELLOW:p.RED}${r}${p.RESET}`),(t>=p.Level.ERROR?process.stderr:process.stdout).write(r+"\n")}static debug(t){p.log(p.Level.DEBUG,t)}static info(t){p.log(p.Level.INFO,t)}static warning(t){p.log(p.Level.WARNING,t)}static warn(t){p.log(p.Level.WARNING,t)}static error(t){p.log(p.Level.ERROR,t)}static critical(t){p.log(p.Level.CRITICAL,t)}}p.RESET="[0m",p.RED="[31m",p.YELLOW="[33m",p.GRAY="[90m",p.Level={DEBUG:0,INFO:1,WARNING:2,ERROR:3,CRITICAL:4},p.initialized=!1,p.currentLevel=p.Level.INFO,p.useColor=!0;const m="judgeval-tracer";class _{constructor(t,e,r,i,s,n=m){this.projectName=t,this.apiKey=e,this.organizationId=r,this.apiUrl=i,this.enableEvaluation=s,this.tracerName=n}static createDefault(t){return(new g).projectName(t).build()}static builder(){return new g}}class g{constructor(){this._apiKey=a||"",this._organizationId=c||"",this._apiUrl=u||"",this._enableEvaluation=!0,this._tracerName=m}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}build(){if(!this._projectName)throw new Error("Project name is required");if(!this._apiKey)throw new Error("API key is required");if(!this._organizationId)throw new Error("Organization ID is required");if(!this._apiUrl)throw new Error("API URL is required");return new _(this._projectName,this._apiKey,this._organizationId,this._apiUrl,this._enableEvaluation,this._tracerName)}}class E{getConfiguration(){return this.configuration}getProjectId(){return this.projectId}getSerializer(){return this.serializer}constructor(t,e,r){this.projectId=null,this.configuration=t,this.apiClient=e,this.serializer=r,this.projectIdPromise=this.resolveProjectId()}async resolveProjectId(){try{p.info(`Resolving project ID for project: ${this.configuration.projectName}`);const t={project_name:this.configuration.projectName},e=await this.apiClient.projectsResolve(t);return this.projectId=e.project_id?.toString()||null,this.projectId?p.info(`Successfully resolved project ID: ${this.projectId}`):p.warn(`Project ID not found for project: ${this.configuration.projectName}`),this.projectId}catch(t){return this.projectId=null,null}}static builder(){return new f}static createDefault(t){return f.builder().configuration(_.createDefault(t)).build()}static createWithConfiguration(t){return f.builder().configuration(t).build()}async getSpanExporter(){const t=await this.projectIdPromise;return t?this.createJudgmentSpanExporter(t):(p.error("Failed to resolve project "+this.configuration.projectName+", please create it first at https://app.judgmentlabs.ai/org/"+this.configuration.organizationId+"/projects. Skipping Judgment export."),new s)}setSpanKind(t){const r=e.getActiveSpan();r?null!==t&&r.setAttribute(n.AttributeKeys.JUDGMENT_SPAN_KIND,t):p.warn("No active span found, skipping setSpanKind")}setAttribute(t,r,i){const s=e.getActiveSpan();s?s.setAttribute(t,this.serializer(r)):p.warn("No active span found, skipping setAttribute")}setLLMSpan(){this.setSpanKind("llm")}setToolSpan(){this.setSpanKind("tool")}setGeneralSpan(){this.setSpanKind("span")}setAttributes(t){if(!t)return;const r=e.getActiveSpan();if(r)for(const[e,i]of Object.entries(t))r.setAttribute(e,this.serializer(i));else p.warn("No active span found, skipping setAttributes")}setInput(t,e){this.setAttribute(n.AttributeKeys.JUDGMENT_INPUT,t)}setOutput(t,e){this.setAttribute(n.AttributeKeys.JUDGMENT_OUTPUT,t)}asyncEvaluate(t,r,i){if(!this.configuration.enableEvaluation)return;const s=e.getActiveSpan();if(!s)return void p.warn("No active span found, skipping asyncEvaluate");if(!s.isRecording())return void p.warn("Active span is not recording, skipping asyncEvaluate");const n=s.spanContext(),o=n.traceId,a=n.spanId;p.info(`asyncEvaluate: project=${this.configuration.projectName}, traceId=${o}, spanId=${a}, scorer=${t.name}`);const c=this.createEvaluationRun(t,r,i,o,a);this.enqueueEvaluation(c)}asyncTraceEvaluate(t,r){if(!this.configuration.enableEvaluation)return;const i=e.getActiveSpan();if(!i)return void p.warn("No active span found, skipping asyncTraceEvaluate");if(!i.isRecording())return void p.warn("Active span is not recording, skipping asyncTraceEvaluate");const s=i.spanContext(),o=s.traceId,a=s.spanId;p.info(`asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${o}, spanId=${a}, scorer=${t.name}`);try{const e=this.createTraceEvaluationRun(t,r,o,a),s=this.serializer(e);i.setAttribute(n.AttributeKeys.PENDING_TRACE_EVAL,s)}catch(t){p.error(`Failed to serialize trace evaluation: ${t instanceof Error?t.message:String(t)}`)}}createTraceEvaluationRun(t,e,r,i){const s=`async_trace_evaluate_${i||Date.now()}`,n=e||h,o=t.toTransport();return{project_name:this.configuration.projectName,eval_name:s,scorer:o,model:n,organization_id:this.configuration.organizationId,trace_id:r,trace_span_id:i}}createJudgmentSpanExporter(t){const e=this.configuration.apiUrl.endsWith("/")?`${this.configuration.apiUrl}otel/v1/traces`:`${this.configuration.apiUrl}/otel/v1/traces`;return new r(e,this.configuration.apiKey,this.configuration.organizationId,t)}createEvaluationRun(t,e,r,i,s){const n=`async_evaluate_${s||Date.now()}`,o=r||h,a=t.toTransport();return{project_name:this.configuration.projectName,eval_name:n,examples:[e],custom_scorers:[],judgment_scorers:[a],model:o,trace_id:i,trace_span_id:s}}async enqueueEvaluation(t){try{await this.apiClient.addToRunEvalQueueExamples(t),p.info(`Enqueuing evaluation run: ${t.eval_name}`)}catch(t){p.error(`Failed to enqueue evaluation run: ${t instanceof Error?t.message:String(t)}`)}}}class f{constructor(){this._serializer=JSON.stringify}static builder(){return new f}configuration(t){return this.config=t,this}apiClient(t){return this._apiClient=t,this}serializer(t){return this._serializer=t,this}build(){if(!this.config)throw new Error("Configuration is required");const t=this._apiClient||new d(this.config.apiUrl,this.config.apiKey,this.config.organizationId);return new E(this.config,t,this._serializer)}}function w(t){return{example_id:void 0,created_at:(new Date).toISOString(),name:null,...t}}var T,y;function I(){const t={score_type:"",class_name:"BaseScorer",name:"",addModel:e=>{t.model=e},successCheck:()=>{if(null!=t.error)return!1;if(null==t.score)return!1;const e=t.threshold??.5,r=t.score;return null!=e&&null!=r&&r>=e},getRequiredParams:()=>[],toTransport:()=>({score_type:t.score_type,name:t.name,threshold:t.threshold??.5,strict_mode:t.strict_mode??!1,required_params:[],kwargs:{}})};return t.name=t.class_name,!0===t.strict_mode&&(t.threshold=1),t}function v(t,e){const r=I();return r.scoreType=t,r.name=t,r.score_type=t,r.requiredParams=e,r.setThreshold=t=>{if(t<0||t>1)throw new Error(`Threshold must be between 0 and 1, got: ${t}`);r.threshold=t},r.getScoreType=()=>r.scoreType,r.setRequiredParams=t=>{r.requiredParams=t},r}!function(t){t.INPUT="input",t.ACTUAL_OUTPUT="actual_output",t.EXPECTED_OUTPUT="expected_output",t.CONTEXT="context",t.RETRIEVAL_CONTEXT="retrieval_context",t.TOOLS_CALLED="tools_called",t.EXPECTED_TOOLS="expected_tools",t.ADDITIONAL_METADATA="additional_metadata"}(T||(T={})),function(t){t.PROMPT_SCORER="Prompt Scorer",t.TRACE_PROMPT_SCORER="Trace Prompt Scorer",t.FAITHFULNESS="Faithfulness",t.ANSWER_RELEVANCY="Answer Relevancy",t.ANSWER_CORRECTNESS="Answer Correctness",t.INSTRUCTION_ADHERENCE="Instruction Adherence",t.EXECUTION_ORDER="Execution Order",t.TOOL_ORDER="Tool Order",t.CLASSIFIER="Classifier",t.TOOL_DEPENDENCY="Tool Dependency",t.CUSTOM="Custom"}(y||(y={}));class S extends Error{constructor(t,e){super(e),this.statusCode=t,this.name="JudgmentAPIError"}}async function P(t,e,r,i,s=a||"",n=c||"",o){if(!u||!s||!n)throw new Error("Missing required API credentials");const h=new d(u,s,n);return(await h.saveScorer({name:t,prompt:e,threshold:r,options:i,is_trace:o})).name}async function R(t,e=a||"",r=c||""){if(!u||!e||!r)throw new Error("Missing required API credentials");const i=new d(u,e,r),s=await i.fetchScorers({names:[t]});if(0===s.scorers.length)throw new S(404,`Scorer with name ${t} not found`);const{created_at:n,updated_at:o,...h}=s.scorers[0];return h}async function N(t,e=a||"",r=c||""){if(!u||!e||!r)throw new Error("Missing required API credentials");const i=new d(u,e,r);return(await i.scorerExists({name:t})).exists}class O{constructor(t,e,r,i,s,n,o=a||"",u=c||""){this.scoreType=t,this.name=e,this.prompt=r,this.threshold=i,this.requiredParams=s,this.options=n,this.judgmentApiKey=o,this.organizationId=u,this.score_type=t,this.class_name="BasePromptScorer",this.model=void 0,this.score=void 0,this.error=null,this.strict_mode=!1}static async get(t,e=a||"",r=c||""){const i=await R(t,e,r),s=!0===i.is_trace;if(s!==(this.prototype.scoreType===y.TRACE_PROMPT_SCORER))throw new S(400,`Scorer with name ${t} is not a ${this.name}`);return new this(s?y.TRACE_PROMPT_SCORER:y.PROMPT_SCORER,i.name,i.prompt,i.threshold,[],i.options,e,r)}static async create(t,e,r=.5,i,s=a||"",n=c||""){if(await N(t,s,n))throw new S(400,`Scorer with name ${t} already exists. Either use the existing scorer with the get() method or use a new name.`);const o=this.prototype.scoreType===y.TRACE_PROMPT_SCORER,u=o?y.TRACE_PROMPT_SCORER:y.PROMPT_SCORER;return await P(t,e,r,i,s,n,o),new this(u,t,e,r,[],i,s,n)}async updateThreshold(t){this.setThreshold(t),await this.pushPromptScorer()}async setPrompt(t){this.prompt=t,await this.pushPromptScorer()}async setOptions(t){this.options=t,await this.pushPromptScorer()}async appendToPrompt(t){this.prompt+=t,await this.pushPromptScorer()}getThreshold(){return this.threshold}getPrompt(){return this.prompt}getOptions(){return this.options?{...this.options}:null}getName(){return this.name}getConfig(){return{name:this.name,prompt:this.prompt,threshold:this.threshold,options:this.options}}async pushPromptScorer(){await P(this.name,this.prompt,this.threshold,this.options,this.judgmentApiKey,this.organizationId)}toString(){return`${this.constructor.name}(name=${this.name}, prompt=${this.prompt}, threshold=${this.threshold}, options=${JSON.stringify(this.options)})`}addModel(t){this.model=t}successCheck(){if(null!=this.error)return!1;if(null==this.score)return!1;const t=this.threshold??.5,e=this.score;return null!=t&&null!=e&&e>=t}getRequiredParams(){return Array.isArray(this.requiredParams)?[...this.requiredParams]:[]}setThreshold(t){if(t<0||t>1)throw new Error(`Threshold must be between 0 and 1, got: ${t}`);this.threshold=t}getScoreType(){return this.scoreType}setRequiredParams(t){this.requiredParams=t}toTransport(){return{score_type:this.getScoreType(),name:this.getName(),threshold:this.getThreshold(),strict_mode:this.strict_mode??!1,required_params:this.getRequiredParams(),kwargs:{prompt:this.getPrompt(),...this.getOptions()?{options:this.getOptions()}:{}}}}}class A extends O{constructor(t,e,r,i,s=[],n,o=a||"",u=c||""){super(t,e,r,i,s,n,o,u)}}class b extends O{constructor(t,e,r,i,s=[],n,o=a||"",u=c||""){super(t,e,r,i,s,n,o,u)}}const j=/^([^(]+?)=>/,C=/^[^(]*\(\s*([^)]*)\)/m,U=/,/,$=/^\s*(_?)(\S+?)\1\s*$/,D=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function L(t){const e=function(t){const e=function(t){return Function.prototype.toString.call(t)}(t).replace(D,"");return e.match(j)||e.match(C)}(t);return e&&e[1]?e[1].split(U).map(t=>t.replace($,(t,e,r)=>r).trim()).filter(t=>t.length>0):[]}export{y as APIScorerType,O as BasePromptScorer,T as ExampleParams,a as JUDGMENT_API_KEY,u as JUDGMENT_API_URL,h as JUDGMENT_DEFAULT_GPT_MODEL,l as JUDGMENT_NO_COLOR,c as JUDGMENT_ORG_ID,S as JudgmentAPIError,d as JudgmentApiClient,r as JudgmentSpanExporter,p as Logger,s as NoOpSpanExporter,n as OpenTelemetryKeys,A as PromptScorer,b as TracePromptScorer,E as Tracer,f as TracerBuilder,_ as TracerConfiguration,g as TracerConfigurationBuilder,v as createAPIScorer,I as createBaseScorer,w as createExample,R as fetchPromptScorer,L as parseFunctionArgs,P as pushPromptScorer,N as scorerExists};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","mappings":"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","sources":["webpack://judgeval/./src/tracer/exporters/JudgmentSpanExporter.ts","webpack://judgeval/./src/tracer/exporters/NoOpSpanExporter.ts","webpack://judgeval/./src/tracer/OpenTelemetryKeys.ts","webpack://judgeval/./src/env.ts","webpack://judgeval/./src/internal/api/index.ts","webpack://judgeval/./src/utils/logger.ts","webpack://judgeval/./src/constants.ts","webpack://judgeval/./src/tracer/TracerConfiguration.ts","webpack://judgeval/./src/tracer/Tracer.ts","webpack://judgeval/./src/data/example.ts","webpack://judgeval/./src/data/example-params.ts","webpack://judgeval/./src/scorers/api-scorer.ts","webpack://judgeval/./src/scorers/base-scorer.ts","webpack://judgeval/./src/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.ts","webpack://judgeval/./src/scorers/api_scorers/prompt_scorer/base-prompt-scorer.ts","webpack://judgeval/./src/scorers/api_scorers/prompt_scorer/prompt-scorer.ts","webpack://judgeval/./src/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.ts","webpack://judgeval/./src/utils/annotate.ts"],"sourcesContent":["import { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\n\nexport class JudgmentSpanExporter extends OTLPTraceExporter {\n constructor(\n endpoint: string,\n apiKey: string,\n organizationId: string,\n projectId: string,\n ) {\n if (!projectId || projectId.trim() === \"\") {\n throw new Error(\"projectId is required for JudgmentSpanExporter\");\n }\n\n super({\n url: endpoint,\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"X-Organization-Id\": organizationId,\n \"X-Project-Id\": projectId,\n },\n });\n }\n\n /**\n * Creates a new builder for constructing JudgmentSpanExporter instances.\n */\n public static builder(): JudgmentSpanExporterBuilder {\n return new JudgmentSpanExporterBuilder();\n }\n}\n\nexport class JudgmentSpanExporterBuilder {\n private _endpoint?: string;\n private _apiKey?: string;\n private _organizationId?: string;\n private _projectId?: string;\n\n constructor() {}\n\n /**\n * Sets the OTLP endpoint URL.\n */\n public endpoint(endpoint: string): this {\n this._endpoint = endpoint;\n return this;\n }\n\n /**\n * Sets the API key for authentication.\n */\n public apiKey(apiKey: string): this {\n this._apiKey = apiKey;\n return this;\n }\n\n /**\n * Sets the organization ID.\n */\n public organizationId(organizationId: string): this {\n this._organizationId = organizationId;\n return this;\n }\n\n /**\n * Sets the project ID.\n */\n public projectId(projectId: string): this {\n this._projectId = projectId;\n return this;\n }\n\n /**\n * Builds a new JudgmentSpanExporter with the current configuration.\n */\n public build(): JudgmentSpanExporter {\n if (!this._endpoint || this._endpoint.trim() === \"\") {\n throw new Error(\"Endpoint is required\");\n }\n if (!this._apiKey || this._apiKey.trim() === \"\") {\n throw new Error(\"API key is required\");\n }\n if (!this._organizationId || this._organizationId.trim() === \"\") {\n throw new Error(\"Organization ID is required\");\n }\n if (!this._projectId || this._projectId.trim() === \"\") {\n throw new Error(\"Project ID is required\");\n }\n\n return new JudgmentSpanExporter(\n this._endpoint,\n this._apiKey,\n this._organizationId,\n this._projectId,\n );\n }\n}\n","import { ExportResult } from \"@opentelemetry/core\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\n\n/**\n * A no-op span exporter that does nothing.\n * Used when project resolution fails or tracing is disabled.\n */\nexport class NoOpSpanExporter implements SpanExporter {\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n resultCallback({ code: 0 });\n }\n\n flush(): Promise<void> {\n return Promise.resolve();\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n}\n","export class OpenTelemetryKeys {\n public static readonly AttributeKeys = {\n JUDGMENT_SPAN_KIND: \"judgment.span_kind\",\n JUDGMENT_INPUT: \"judgment.input\",\n JUDGMENT_OUTPUT: \"judgment.output\",\n PENDING_TRACE_EVAL: \"judgment.pending_trace_eval\",\n } as const;\n\n public static readonly ResourceKeys = {\n JUDGMENT_PROJECT_ID: \"judgment.project_id\",\n } as const;\n}\n","function getEnvVar(varName: string): string | null;\nfunction getEnvVar(varName: string, defaultValue: string): string;\nfunction getEnvVar(varName: string, defaultValue?: string): string | null {\n const value = process.env[varName];\n if (!value) {\n return defaultValue ?? null;\n }\n return value;\n}\n\nexport const JUDGMENT_API_KEY = getEnvVar(\"JUDGMENT_API_KEY\");\nexport const JUDGMENT_ORG_ID = getEnvVar(\"JUDGMENT_ORG_ID\");\nexport const JUDGMENT_API_URL = getEnvVar(\n \"JUDGMENT_API_URL\",\n \"https://api.judgmentlabs.ai\",\n);\nexport const JUDGMENT_DEFAULT_GPT_MODEL = getEnvVar(\n \"JUDGMENT_DEFAULT_GPT_MODEL\",\n \"gpt-4.1\",\n);\nexport const JUDGMENT_NO_COLOR = getEnvVar(\"JUDGMENT_NO_COLOR\");\n","/**\n * Auto-generated by scripts/generate-client.ts\n * DO NOT EDIT MANUALLY - This file is generated automatically\n */\nimport * as Models from \"./models\";\n\nexport class JudgmentApiClient {\n private baseUrl: string;\n private apiKey: string;\n private organizationId: string;\n\n constructor(baseUrl: string, apiKey: string, organizationId: string) {\n this.baseUrl = baseUrl;\n this.apiKey = apiKey;\n this.organizationId = organizationId;\n }\n\n private buildUrl(path: string): string {\n return this.baseUrl + path;\n }\n\n private buildHeaders(): Record<string, string> {\n if (!this.apiKey || !this.organizationId) {\n throw new Error(\"API key and organization ID cannot be null\");\n }\n return {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n \"X-Organization-Id\": this.organizationId,\n };\n }\n\n async addToRunEvalQueueExamples(\n payload: Models.ExampleEvaluationRun,\n ): Promise<void> {\n const url = this.buildUrl(\"/add_to_run_eval_queue/examples\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async addToRunEvalQueueTraces(\n payload: Models.TraceEvaluationRun,\n ): Promise<void> {\n const url = this.buildUrl(\"/add_to_run_eval_queue/traces\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async logEvalResults(payload: Models.EvalResults): Promise<void> {\n const url = this.buildUrl(\"/log_eval_results/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async fetchExperimentRun(payload: Models.EvalResultsFetch): Promise<void> {\n const url = this.buildUrl(\"/fetch_experiment_run/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async getEvaluationStatus(\n experiment_run_id: string,\n project_name: string,\n ): Promise<void> {\n const queryParams = new URLSearchParams();\n queryParams.set(\"experiment_run_id\", experiment_run_id);\n queryParams.set(\"project_name\", project_name);\n const url = this.buildUrl(\n \"/get_evaluation_status/\" +\n (queryParams.toString() ? \"?\" + queryParams.toString() : \"\"),\n );\n const response = await fetch(url, {\n method: \"GET\",\n headers: this.buildHeaders(),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async scorerExists(\n payload: Models.ScorerExistsRequest,\n ): Promise<Models.ScorerExistsResponse> {\n const url = this.buildUrl(\"/scorer_exists/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.ScorerExistsResponse;\n }\n\n async saveScorer(\n payload: Models.SavePromptScorerRequest,\n ): Promise<Models.SavePromptScorerResponse> {\n const url = this.buildUrl(\"/save_scorer/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.SavePromptScorerResponse;\n }\n\n async fetchScorers(\n payload: Models.FetchPromptScorersRequest,\n ): Promise<Models.FetchPromptScorersResponse> {\n const url = this.buildUrl(\"/fetch_scorers/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.FetchPromptScorersResponse;\n }\n\n async projectsResolve(\n payload: Models.ResolveProjectNameRequest,\n ): Promise<Models.ResolveProjectNameResponse> {\n const url = this.buildUrl(\"/projects/resolve/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.ResolveProjectNameResponse;\n }\n}\n","export class Logger {\n private static readonly RESET = \"\\x1b[0m\";\n private static readonly RED = \"\\x1b[31m\";\n private static readonly YELLOW = \"\\x1b[33m\";\n private static readonly GRAY = \"\\x1b[90m\";\n\n public static Level = {\n DEBUG: 0,\n INFO: 1,\n WARNING: 2,\n ERROR: 3,\n CRITICAL: 4,\n } as const;\n\n private static initialized = false;\n private static currentLevel: number = Logger.Level.INFO;\n private static useColor = true;\n\n private static initialize(): void {\n if (!Logger.initialized) {\n const noColor = process.env.JUDGMENT_NO_COLOR;\n Logger.useColor = !noColor && process.stdout.isTTY;\n Logger.initialized = true;\n }\n }\n\n public static setLevel(level: number): void {\n Logger.currentLevel = level;\n }\n\n public static setUseColor(useColor: boolean): void {\n Logger.useColor = useColor;\n }\n\n private static log(level: number, message: string): void {\n Logger.initialize();\n\n if (level < Logger.currentLevel) {\n return;\n }\n\n const timestamp = new Date()\n .toISOString()\n .replace(\"T\", \" \")\n .substring(0, 19);\n const levelName =\n Object.keys(Logger.Level).find(\n (key) => Logger.Level[key as keyof typeof Logger.Level] === level,\n ) || \"UNKNOWN\";\n let formattedMessage = `${timestamp} - judgeval - ${levelName} - ${message}`;\n\n if (Logger.useColor) {\n const color =\n level === Logger.Level.DEBUG || level === Logger.Level.INFO\n ? Logger.GRAY\n : level === Logger.Level.WARNING\n ? Logger.YELLOW\n : Logger.RED;\n formattedMessage = `${color}${formattedMessage}${Logger.RESET}`;\n }\n\n const output =\n level >= Logger.Level.ERROR ? process.stderr : process.stdout;\n output.write(formattedMessage + \"\\n\");\n }\n\n public static debug(message: string): void {\n Logger.log(Logger.Level.DEBUG, message);\n }\n\n public static info(message: string): void {\n Logger.log(Logger.Level.INFO, message);\n }\n\n public static warning(message: string): void {\n Logger.log(Logger.Level.WARNING, message);\n }\n\n public static warn(message: string): void {\n Logger.log(Logger.Level.WARNING, message);\n }\n\n public static error(message: string): void {\n Logger.log(Logger.Level.ERROR, message);\n }\n\n public static critical(message: string): void {\n Logger.log(Logger.Level.CRITICAL, message);\n }\n}\n","export const TRACER_NAME = \"judgeval-tracer\";\n","import { TRACER_NAME } from \"../constants\";\nimport { JUDGMENT_API_KEY, JUDGMENT_API_URL, JUDGMENT_ORG_ID } from \"../env\";\n\n/**\n * Configuration for the Judgment Tracer that controls how tracing and evaluation behave.\n *\n * This class encapsulates all configuration parameters needed to initialize a Tracer.\n *\n * @example\n * ```typescript\n * const config = TracerConfiguration.builder()\n * .projectName(\"my-project\")\n * .apiKey(\"your-api-key\")\n * .organizationId(\"your-org-id\")\n * .enableEvaluation(true)\n * .build();\n *\n * const tracer = Tracer.createWithConfiguration(config);\n * ```\n */\nexport class TracerConfiguration {\n constructor(\n public readonly projectName: string,\n public readonly apiKey: string,\n public readonly organizationId: string,\n public readonly apiUrl: string,\n public readonly enableEvaluation: boolean,\n public readonly tracerName: string = TRACER_NAME,\n ) {}\n\n /**\n * Creates a default configuration with the given project name.\n *\n * This method uses default values from environment variables:\n * - API Key: JUDGMENT_API_KEY\n * - Organization ID: JUDGMENT_ORG_ID\n * - API URL: JUDGMENT_API_URL\n * - Evaluation: enabled\n *\n * @param projectName the name of the project\n * @returns a new TracerConfiguration with default values\n * @throws Error if project name is null or empty\n */\n public static createDefault(projectName: string): TracerConfiguration {\n return new TracerConfigurationBuilder().projectName(projectName).build();\n }\n\n public static builder(): TracerConfigurationBuilder {\n return new TracerConfigurationBuilder();\n }\n}\n\n/**\n * Builder for creating TracerConfiguration instances.\n *\n * @example\n * ```typescript\n * const config = TracerConfiguration.builder()\n * .projectName(\"my-project\")\n * .apiKey(\"custom-api-key\")\n * .organizationId(\"custom-org-id\")\n * .apiUrl(\"https://custom-api.judgmentlabs.ai\")\n * .enableEvaluation(false)\n * .build();\n * ```\n */\nexport class TracerConfigurationBuilder {\n private _projectName?: string;\n private _apiKey: string = JUDGMENT_API_KEY || \"\";\n private _organizationId: string = JUDGMENT_ORG_ID || \"\";\n private _apiUrl: string = JUDGMENT_API_URL || \"\";\n private _enableEvaluation: boolean = true;\n private _tracerName: string = TRACER_NAME;\n\n public projectName(projectName: string): this {\n this._projectName = projectName;\n return this;\n }\n\n public apiKey(apiKey: string): this {\n this._apiKey = apiKey;\n return this;\n }\n\n public organizationId(organizationId: string): this {\n this._organizationId = organizationId;\n return this;\n }\n\n public apiUrl(apiUrl: string): this {\n this._apiUrl = apiUrl;\n return this;\n }\n\n public enableEvaluation(enableEvaluation: boolean): this {\n this._enableEvaluation = enableEvaluation;\n return this;\n }\n\n public tracerName(tracerName: string): this {\n this._tracerName = tracerName;\n return this;\n }\n\n public build(): TracerConfiguration {\n if (!this._projectName) {\n throw new Error(\"Project name is required\");\n }\n\n if (!this._apiKey) {\n throw new Error(\"API key is required\");\n }\n\n if (!this._organizationId) {\n throw new Error(\"Organization ID is required\");\n }\n\n if (!this._apiUrl) {\n throw new Error(\"API URL is required\");\n }\n\n return new TracerConfiguration(\n this._projectName,\n this._apiKey,\n this._organizationId,\n this._apiUrl,\n this._enableEvaluation,\n this._tracerName,\n );\n }\n}\n","import { trace } from \"@opentelemetry/api\";\nimport { JUDGMENT_DEFAULT_GPT_MODEL } from \"../env\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport {\n ExampleEvaluationRun,\n Example as ExampleModel,\n ResolveProjectNameRequest,\n} from \"../internal/api/models\";\nimport { BaseScorer } from \"../scorers/base-scorer\";\nimport { Logger } from \"../utils/logger\";\nimport { JudgmentSpanExporter, NoOpSpanExporter } from \"./exporters\";\nimport { OpenTelemetryKeys } from \"./OpenTelemetryKeys\";\nimport { TracerConfiguration } from \"./TracerConfiguration\";\n\nexport type Serializer = (obj: unknown) => string;\n\nexport class Tracer {\n private readonly configuration: TracerConfiguration;\n private readonly apiClient: JudgmentApiClient;\n private readonly serializer: Serializer;\n private projectId: string | null = null;\n private projectIdPromise: Promise<string | null>;\n\n public getConfiguration(): TracerConfiguration {\n return this.configuration;\n }\n\n public getProjectId(): string | null {\n return this.projectId;\n }\n\n public getSerializer(): Serializer {\n return this.serializer;\n }\n\n constructor(\n configuration: TracerConfiguration,\n apiClient: JudgmentApiClient,\n serializer: Serializer,\n ) {\n this.configuration = configuration;\n this.apiClient = apiClient;\n this.serializer = serializer;\n this.projectIdPromise = this.resolveProjectId();\n }\n\n private async resolveProjectId(): Promise<string | null> {\n try {\n Logger.info(\n `Resolving project ID for project: ${this.configuration.projectName}`,\n );\n\n const request: ResolveProjectNameRequest = {\n project_name: this.configuration.projectName,\n } as const;\n\n const response = await this.apiClient.projectsResolve(request);\n this.projectId = response.project_id?.toString() || null;\n\n if (this.projectId) {\n Logger.info(`Successfully resolved project ID: ${this.projectId}`);\n } else {\n Logger.warn(\n `Project ID not found for project: ${this.configuration.projectName}`,\n );\n }\n\n return this.projectId;\n } catch (error) {\n this.projectId = null;\n return null;\n }\n }\n\n public static builder(): TracerBuilder {\n return new TracerBuilder();\n }\n\n public static createDefault(projectName: string): Tracer {\n return TracerBuilder.builder()\n .configuration(TracerConfiguration.createDefault(projectName))\n .build();\n }\n\n public static createWithConfiguration(\n configuration: TracerConfiguration,\n ): Tracer {\n return TracerBuilder.builder().configuration(configuration).build();\n }\n\n public async getSpanExporter(): Promise<\n JudgmentSpanExporter | NoOpSpanExporter\n > {\n const projectId = await this.projectIdPromise;\n if (!projectId) {\n Logger.error(\n \"Failed to resolve project \" +\n this.configuration.projectName +\n \", please create it first at https://app.judgmentlabs.ai/org/\" +\n this.configuration.organizationId +\n \"/projects. Skipping Judgment export.\",\n );\n return new NoOpSpanExporter();\n }\n return this.createJudgmentSpanExporter(projectId);\n }\n\n public setSpanKind(kind: string | null): void {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setSpanKind\");\n return;\n }\n if (kind !== null) {\n currentSpan.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_SPAN_KIND,\n kind,\n );\n }\n }\n\n public setAttribute(key: string, value: unknown, type?: any): void {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setAttribute\");\n return;\n }\n currentSpan.setAttribute(key, this.serializer(value));\n }\n\n public setLLMSpan(): void {\n this.setSpanKind(\"llm\");\n }\n\n public setToolSpan(): void {\n this.setSpanKind(\"tool\");\n }\n\n public setGeneralSpan(): void {\n this.setSpanKind(\"span\");\n }\n\n public setAttributes(attributes: Record<string, unknown>): void {\n if (!attributes) {\n return;\n }\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setAttributes\");\n return;\n }\n for (const [key, value] of Object.entries(attributes)) {\n currentSpan.setAttribute(key, this.serializer(value));\n }\n }\n\n public setInput(input: unknown, type?: any): void {\n this.setAttribute(OpenTelemetryKeys.AttributeKeys.JUDGMENT_INPUT, input);\n }\n\n public setOutput(output: unknown, type?: any): void {\n this.setAttribute(OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT, output);\n }\n\n public asyncEvaluate(\n scorer: BaseScorer,\n example: ExampleModel,\n model?: string,\n ): void {\n if (!this.configuration.enableEvaluation) {\n return;\n }\n\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping asyncEvaluate\");\n return;\n }\n if (!currentSpan.isRecording()) {\n Logger.warn(\"Active span is not recording, skipping asyncEvaluate\");\n return;\n }\n\n const spanContext = currentSpan.spanContext();\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n Logger.info(\n `asyncEvaluate: project=${this.configuration.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorer.name}`,\n );\n\n const evaluationRun = this.createEvaluationRun(\n scorer,\n example,\n model,\n traceId,\n spanId,\n );\n this.enqueueEvaluation(evaluationRun);\n }\n\n public asyncTraceEvaluate(scorer: BaseScorer, model?: string): void {\n if (!this.configuration.enableEvaluation) {\n return;\n }\n\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping asyncTraceEvaluate\");\n return;\n }\n if (!currentSpan.isRecording()) {\n Logger.warn(\"Active span is not recording, skipping asyncTraceEvaluate\");\n return;\n }\n\n const spanContext = currentSpan.spanContext();\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n Logger.info(\n `asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorer.name}`,\n );\n\n try {\n const traceEvaluationRun = this.createTraceEvaluationRun(\n scorer,\n model,\n traceId,\n spanId,\n );\n const traceEvalJson = this.serializer(traceEvaluationRun);\n currentSpan.setAttribute(\n OpenTelemetryKeys.AttributeKeys.PENDING_TRACE_EVAL,\n traceEvalJson,\n );\n } catch (error) {\n Logger.error(\n `Failed to serialize trace evaluation: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private createTraceEvaluationRun(\n scorer: BaseScorer,\n model: string | undefined,\n traceId: string,\n spanId: string,\n ): any {\n const evalName = `async_trace_evaluate_${spanId || Date.now()}`;\n const modelName = model || JUDGMENT_DEFAULT_GPT_MODEL;\n\n const scorerConfig = scorer.toTransport();\n\n return {\n project_name: this.configuration.projectName,\n eval_name: evalName,\n scorer: scorerConfig,\n model: modelName,\n organization_id: this.configuration.organizationId,\n trace_id: traceId,\n trace_span_id: spanId,\n };\n }\n\n private createJudgmentSpanExporter(projectId: string): JudgmentSpanExporter {\n const endpoint = this.configuration.apiUrl.endsWith(\"/\")\n ? `${this.configuration.apiUrl}otel/v1/traces`\n : `${this.configuration.apiUrl}/otel/v1/traces`;\n\n return new JudgmentSpanExporter(\n endpoint,\n this.configuration.apiKey,\n this.configuration.organizationId,\n projectId,\n );\n }\n\n private createEvaluationRun(\n scorer: BaseScorer,\n example: ExampleModel,\n model: string | undefined,\n traceId: string,\n spanId: string,\n ): ExampleEvaluationRun {\n const runId = `async_evaluate_${spanId || Date.now()}`;\n const modelName = model || JUDGMENT_DEFAULT_GPT_MODEL;\n\n const scorerConfig = scorer.toTransport();\n\n const evaluationRun: ExampleEvaluationRun = {\n project_name: this.configuration.projectName,\n eval_name: runId,\n examples: [example],\n custom_scorers: [],\n judgment_scorers: [scorerConfig],\n model: modelName,\n trace_id: traceId,\n trace_span_id: spanId,\n };\n\n return evaluationRun;\n }\n\n private async enqueueEvaluation(\n evaluationRun: ExampleEvaluationRun,\n ): Promise<void> {\n try {\n await this.apiClient.addToRunEvalQueueExamples(evaluationRun);\n Logger.info(`Enqueuing evaluation run: ${evaluationRun.eval_name}`);\n } catch (error) {\n Logger.error(\n `Failed to enqueue evaluation run: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n}\n\nexport class TracerBuilder {\n private config?: TracerConfiguration;\n private _apiClient?: JudgmentApiClient;\n private _serializer: Serializer = JSON.stringify;\n\n public static builder(): TracerBuilder {\n return new TracerBuilder();\n }\n\n public configuration(configuration: TracerConfiguration): this {\n this.config = configuration;\n return this;\n }\n\n public apiClient(apiClient: JudgmentApiClient): this {\n this._apiClient = apiClient;\n return this;\n }\n\n public serializer(serializer: Serializer): this {\n this._serializer = serializer;\n return this;\n }\n\n public build(): Tracer {\n if (!this.config) {\n throw new Error(\"Configuration is required\");\n }\n\n const client =\n this._apiClient ||\n new JudgmentApiClient(\n this.config.apiUrl,\n this.config.apiKey,\n this.config.organizationId,\n );\n\n return new Tracer(this.config, client, this._serializer);\n }\n}\n","import { Example as ExampleModel } from \"../internal/api/models/Example\";\n\nexport type Example<T extends Record<string, any> = Record<string, any>> =\n ExampleModel & T;\n\nexport function createExample<T extends Record<string, any>>(\n properties: T,\n): Example<T> {\n const example: Example<T> = {\n example_id: undefined,\n created_at: new Date().toISOString(),\n name: null,\n ...properties,\n } as Example<T>;\n\n return example;\n}\n","export enum ExampleParams {\n INPUT = \"input\",\n ACTUAL_OUTPUT = \"actual_output\",\n EXPECTED_OUTPUT = \"expected_output\",\n CONTEXT = \"context\",\n RETRIEVAL_CONTEXT = \"retrieval_context\",\n TOOLS_CALLED = \"tools_called\",\n EXPECTED_TOOLS = \"expected_tools\",\n ADDITIONAL_METADATA = \"additional_metadata\",\n}\n\nexport type ExampleParamKeys = keyof typeof ExampleParams;\nexport type ExampleParamValues = `${ExampleParams}`;\n","import { BaseScorer, createBaseScorer } from \"./base-scorer\";\n\nexport enum APIScorerType {\n PROMPT_SCORER = \"Prompt Scorer\",\n TRACE_PROMPT_SCORER = \"Trace Prompt Scorer\",\n FAITHFULNESS = \"Faithfulness\",\n ANSWER_RELEVANCY = \"Answer Relevancy\",\n ANSWER_CORRECTNESS = \"Answer Correctness\",\n INSTRUCTION_ADHERENCE = \"Instruction Adherence\",\n EXECUTION_ORDER = \"Execution Order\",\n TOOL_ORDER = \"Tool Order\",\n CLASSIFIER = \"Classifier\",\n TOOL_DEPENDENCY = \"Tool Dependency\",\n CUSTOM = \"Custom\",\n}\n\nexport type APIScorer<\n T extends APIScorerType = APIScorerType,\n P extends readonly string[] = readonly string[],\n> = BaseScorer & {\n scoreType: T;\n requiredParams: P;\n setThreshold: (threshold: number) => void;\n getScoreType: () => T;\n setRequiredParams: (params: P) => void;\n};\n\nexport function createAPIScorer<\n T extends APIScorerType,\n P extends readonly string[],\n>(scoreType: T, requiredParams: P): APIScorer<T, P> {\n const scorer = createBaseScorer() as APIScorer<T, P>;\n\n scorer.scoreType = scoreType;\n scorer.name = scoreType;\n scorer.score_type = scoreType;\n scorer.requiredParams = requiredParams;\n\n scorer.setThreshold = (threshold: number) => {\n if (threshold < 0 || threshold > 1) {\n throw new Error(`Threshold must be between 0 and 1, got: ${threshold}`);\n }\n scorer.threshold = threshold;\n };\n\n scorer.getScoreType = () => {\n return scorer.scoreType;\n };\n\n scorer.setRequiredParams = (params: P) => {\n scorer.requiredParams = params;\n };\n\n return scorer;\n}\n","import { ScorerConfig } from \"../internal/api/models\";\nimport { BaseScorer as BaseScorerModel } from \"../internal/api/models/BaseScorer\";\n\nexport type BaseScorer = BaseScorerModel & {\n addModel: (model: string) => void;\n successCheck: () => boolean;\n getRequiredParams: () => string[];\n toTransport: () => ScorerConfig;\n};\n\nexport function createBaseScorer(): BaseScorer {\n const scorer: BaseScorer = {\n score_type: \"\",\n class_name: \"\",\n name: \"\",\n addModel: (model: string) => {\n scorer.model = model;\n },\n successCheck: () => {\n if (scorer.error != null) {\n return false;\n }\n if (scorer.score == null) {\n return false;\n }\n const threshold = scorer.threshold ?? 0.5;\n const score = scorer.score;\n return threshold != null && score != null && score >= threshold;\n },\n getRequiredParams: () => {\n return [];\n },\n toTransport: () => {\n return {\n score_type: scorer.score_type,\n name: scorer.name,\n threshold: scorer.threshold ?? 0.5,\n strict_mode: scorer.strict_mode ?? false,\n required_params: [],\n kwargs: {},\n };\n },\n };\n\n scorer.class_name = \"BaseScorer\";\n scorer.name = scorer.class_name;\n if (scorer.strict_mode === true) {\n scorer.threshold = 1.0;\n }\n\n return scorer;\n}\n","import {\n JUDGMENT_API_KEY,\n JUDGMENT_API_URL,\n JUDGMENT_ORG_ID,\n} from \"../../../env\";\nimport { JudgmentApiClient } from \"../../../internal/api\";\n\nexport class JudgmentAPIError extends Error {\n constructor(\n public statusCode: number,\n message: string,\n ) {\n super(message);\n this.name = \"JudgmentAPIError\";\n }\n}\n\nexport async function pushPromptScorer(\n name: string,\n prompt: string,\n threshold: number,\n options?: Record<string, number> | null,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n isTrace?: boolean,\n): Promise<string> {\n if (!JUDGMENT_API_URL || !judgmentApiKey || !organizationId) {\n throw new Error(\"Missing required API credentials\");\n }\n\n const client = new JudgmentApiClient(\n JUDGMENT_API_URL,\n judgmentApiKey,\n organizationId,\n );\n const response = await client.saveScorer({\n name,\n prompt,\n threshold,\n options,\n is_trace: isTrace,\n });\n return response.name;\n}\n\nexport async function fetchPromptScorer(\n name: string,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n) {\n if (!JUDGMENT_API_URL || !judgmentApiKey || !organizationId) {\n throw new Error(\"Missing required API credentials\");\n }\n\n const client = new JudgmentApiClient(\n JUDGMENT_API_URL,\n judgmentApiKey,\n organizationId,\n );\n const response = await client.fetchScorers({ names: [name] });\n if (response.scorers.length === 0) {\n throw new JudgmentAPIError(404, `Scorer with name ${name} not found`);\n }\n const { created_at, updated_at, ...config } = response.scorers[0];\n return config;\n}\n\nexport async function scorerExists(\n name: string,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n): Promise<boolean> {\n if (!JUDGMENT_API_URL || !judgmentApiKey || !organizationId) {\n throw new Error(\"Missing required API credentials\");\n }\n\n const client = new JudgmentApiClient(\n JUDGMENT_API_URL,\n judgmentApiKey,\n organizationId,\n );\n const response = await client.scorerExists({ name });\n return response.exists;\n}\n","import { JUDGMENT_API_KEY, JUDGMENT_ORG_ID } from \"../../../env\";\nimport { ScorerConfig } from \"../../../internal/api/models\";\nimport { APIScorer, APIScorerType } from \"../../api-scorer\";\nimport {\n fetchPromptScorer,\n JudgmentAPIError,\n pushPromptScorer,\n scorerExists,\n} from \"./prompt-scorer-utils\";\n\nexport abstract class BasePromptScorer\n implements APIScorer<APIScorerType, readonly string[]>\n{\n public scoreType: APIScorerType;\n public name: string;\n public prompt: string;\n public threshold: number;\n public options?: Record<string, number> | null;\n public judgmentApiKey: string;\n public organizationId: string;\n public requiredParams: readonly string[];\n public score_type: string;\n public class_name: string;\n public model?: string;\n public score?: number;\n public error?: string | null;\n public strict_mode?: boolean;\n\n constructor(\n scoreType: APIScorerType,\n name: string,\n prompt: string,\n threshold: number,\n requiredParams: readonly string[],\n options?: Record<string, number> | null,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n ) {\n this.scoreType = scoreType;\n this.name = name;\n this.prompt = prompt;\n this.threshold = threshold;\n this.requiredParams = requiredParams;\n this.options = options;\n this.judgmentApiKey = judgmentApiKey;\n this.organizationId = organizationId;\n this.score_type = scoreType;\n this.class_name = \"BasePromptScorer\";\n this.model = undefined;\n this.score = undefined;\n this.error = null;\n this.strict_mode = false;\n }\n score_breakdown?: Record<string, any> | null | undefined;\n reason?: string | null | undefined;\n using_native_model?: boolean | null | undefined;\n success?: boolean | null | undefined;\n model_client?: any;\n additional_metadata?: Record<string, any> | null | undefined;\n user?: string | null | undefined;\n server_hosted?: boolean | undefined;\n\n static async get<T extends BasePromptScorer>(\n this: new (...args: any[]) => T,\n name: string,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n ): Promise<T> {\n const config = await fetchPromptScorer(\n name,\n judgmentApiKey,\n organizationId,\n );\n\n const isTrace = config.is_trace === true;\n const expectedIsTrace =\n this.prototype.scoreType === APIScorerType.TRACE_PROMPT_SCORER;\n\n if (isTrace !== expectedIsTrace) {\n throw new JudgmentAPIError(\n 400,\n `Scorer with name ${name} is not a ${this.name}`,\n );\n }\n\n const scoreType = isTrace\n ? APIScorerType.TRACE_PROMPT_SCORER\n : APIScorerType.PROMPT_SCORER;\n\n return new this(\n scoreType,\n config.name, // Use config.name instead of name parameter\n config.prompt,\n config.threshold,\n [],\n config.options,\n judgmentApiKey,\n organizationId,\n );\n }\n\n static async create<T extends BasePromptScorer>(\n this: new (...args: any[]) => T,\n name: string,\n prompt: string,\n threshold: number = 0.5,\n options?: Record<string, number> | null,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n ): Promise<T> {\n if (await scorerExists(name, judgmentApiKey, organizationId)) {\n throw new JudgmentAPIError(\n 400,\n `Scorer with name ${name} already exists. Either use the existing scorer with the get() method or use a new name.`,\n );\n }\n\n const isTrace =\n this.prototype.scoreType === APIScorerType.TRACE_PROMPT_SCORER;\n const scoreType = isTrace\n ? APIScorerType.TRACE_PROMPT_SCORER\n : APIScorerType.PROMPT_SCORER;\n\n await pushPromptScorer(\n name,\n prompt,\n threshold,\n options,\n judgmentApiKey,\n organizationId,\n isTrace,\n );\n\n return new this(\n scoreType,\n name,\n prompt,\n threshold,\n [],\n options,\n judgmentApiKey,\n organizationId,\n );\n }\n\n async updateThreshold(threshold: number): Promise<void> {\n this.setThreshold(threshold);\n await this.pushPromptScorer();\n }\n\n async setPrompt(prompt: string): Promise<void> {\n this.prompt = prompt;\n await this.pushPromptScorer();\n }\n\n async setOptions(options: Record<string, number> | null): Promise<void> {\n this.options = options;\n await this.pushPromptScorer();\n }\n\n async appendToPrompt(promptAddition: string): Promise<void> {\n this.prompt += promptAddition;\n await this.pushPromptScorer();\n }\n\n getThreshold(): number {\n return this.threshold;\n }\n\n getPrompt(): string {\n return this.prompt;\n }\n\n getOptions(): Record<string, number> | null {\n return this.options ? { ...this.options } : null;\n }\n\n getName(): string {\n return this.name;\n }\n\n getConfig(): Record<string, any> {\n return {\n name: this.name,\n prompt: this.prompt,\n threshold: this.threshold,\n options: this.options,\n };\n }\n\n async pushPromptScorer(): Promise<void> {\n await pushPromptScorer(\n this.name,\n this.prompt,\n this.threshold,\n this.options,\n this.judgmentApiKey,\n this.organizationId,\n );\n }\n\n toString(): string {\n return `${this.constructor.name}(name=${this.name}, prompt=${\n this.prompt\n }, threshold=${this.threshold}, options=${JSON.stringify(this.options)})`;\n }\n\n addModel(model: string): void {\n this.model = model;\n }\n\n successCheck(): boolean {\n if (this.error != null) {\n return false;\n }\n if (this.score == null) {\n return false;\n }\n const threshold = this.threshold ?? 0.5;\n const score = this.score;\n return threshold != null && score != null && score >= threshold;\n }\n\n getRequiredParams(): string[] {\n if (Array.isArray(this.requiredParams)) {\n return [...this.requiredParams];\n }\n return [];\n }\n\n setThreshold(threshold: number): void {\n if (threshold < 0 || threshold > 1) {\n throw new Error(`Threshold must be between 0 and 1, got: ${threshold}`);\n }\n this.threshold = threshold;\n }\n\n getScoreType(): APIScorerType {\n return this.scoreType;\n }\n\n setRequiredParams(params: readonly string[]): void {\n this.requiredParams = params;\n }\n\n toTransport(): ScorerConfig {\n return {\n score_type: this.getScoreType(),\n name: this.getName(),\n threshold: this.getThreshold(),\n strict_mode: this.strict_mode ?? false,\n required_params: this.getRequiredParams(),\n kwargs: {\n prompt: this.getPrompt(),\n ...(this.getOptions() ? { options: this.getOptions() } : {}),\n },\n };\n }\n}\n","import { JUDGMENT_API_KEY, JUDGMENT_ORG_ID } from \"../../../env\";\nimport { APIScorerType } from \"../../api-scorer\";\nimport { BasePromptScorer } from \"./base-prompt-scorer\";\nexport {\n fetchPromptScorer,\n JudgmentAPIError,\n pushPromptScorer,\n scorerExists,\n} from \"./prompt-scorer-utils\";\n\nexport class PromptScorer extends BasePromptScorer {\n constructor(\n scoreType: APIScorerType,\n name: string,\n prompt: string,\n threshold: number,\n requiredParams: readonly string[] = [],\n options?: Record<string, number> | null,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n ) {\n super(\n scoreType,\n name,\n prompt,\n threshold,\n requiredParams,\n options,\n judgmentApiKey,\n organizationId,\n );\n }\n}\n","import { JUDGMENT_API_KEY, JUDGMENT_ORG_ID } from \"../../../env\";\nimport { APIScorerType } from \"../../api-scorer\";\nimport { BasePromptScorer } from \"./base-prompt-scorer\";\n\nexport class TracePromptScorer extends BasePromptScorer {\n constructor(\n scoreType: APIScorerType,\n name: string,\n prompt: string,\n threshold: number,\n requiredParams: readonly string[] = [],\n options?: Record<string, number> | null,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\"\n ) {\n super(\n scoreType,\n name,\n prompt,\n threshold,\n requiredParams,\n options,\n judgmentApiKey,\n organizationId\n );\n }\n}\n","// Adopted from https://github.com/angular/angular.js/blob/master/src/auto/injector.js\n\nconst ARROW_ARG = /^([^(]+?)=>/;\nconst FN_ARGS = /^[^(]*\\(\\s*([^)]*)\\)/m;\nconst FN_ARG_SPLIT = /,/;\nconst FN_ARG = /^\\s*(_?)(\\S+?)\\1\\s*$/;\nconst STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/gm;\n\nfunction stringifyFn(fn: Function): string {\n return Function.prototype.toString.call(fn);\n}\n\nfunction extractArgs(fn: Function): RegExpMatchArray | null {\n const fnText = stringifyFn(fn).replace(STRIP_COMMENTS, \"\");\n return fnText.match(ARROW_ARG) || fnText.match(FN_ARGS);\n}\n\nexport function parseFunctionArgs(fn: Function): string[] {\n const args = extractArgs(fn);\n if (!args || !args[1]) {\n return [];\n }\n\n return args[1]\n .split(FN_ARG_SPLIT)\n .map((arg) => {\n const match = arg.replace(FN_ARG, (all, underscore, name) => name);\n return match.trim();\n })\n .filter((name) => name.length > 0);\n}\n"],"names":["JudgmentSpanExporter","OTLPTraceExporter","constructor","endpoint","apiKey","organizationId","projectId","trim","Error","super","url","headers","Authorization","builder","JudgmentSpanExporterBuilder","this","_endpoint","_apiKey","_organizationId","_projectId","build","NoOpSpanExporter","spans","resultCallback","code","flush","Promise","resolve","shutdown","OpenTelemetryKeys","getEnvVar","varName","defaultValue","process","env","AttributeKeys","JUDGMENT_SPAN_KIND","JUDGMENT_INPUT","JUDGMENT_OUTPUT","PENDING_TRACE_EVAL","ResourceKeys","JUDGMENT_PROJECT_ID","JUDGMENT_API_KEY","JUDGMENT_ORG_ID","JUDGMENT_API_URL","JUDGMENT_DEFAULT_GPT_MODEL","JUDGMENT_NO_COLOR","JudgmentApiClient","baseUrl","buildUrl","path","buildHeaders","addToRunEvalQueueExamples","payload","response","fetch","method","body","JSON","stringify","ok","status","text","addToRunEvalQueueTraces","logEvalResults","fetchExperimentRun","getEvaluationStatus","experiment_run_id","project_name","queryParams","URLSearchParams","set","toString","scorerExists","json","saveScorer","fetchScorers","projectsResolve","Logger","initialize","initialized","noColor","useColor","stdout","isTTY","setLevel","level","currentLevel","setUseColor","log","message","formattedMessage","Date","toISOString","replace","substring","Object","keys","Level","find","key","DEBUG","INFO","GRAY","WARNING","YELLOW","RED","RESET","ERROR","stderr","write","debug","info","warning","warn","error","critical","CRITICAL","TRACER_NAME","TracerConfiguration","projectName","apiUrl","enableEvaluation","tracerName","createDefault","TracerConfigurationBuilder","_apiUrl","_enableEvaluation","_tracerName","_projectName","Tracer","getConfiguration","configuration","getProjectId","getSerializer","serializer","apiClient","projectIdPromise","resolveProjectId","request","project_id","TracerBuilder","createWithConfiguration","getSpanExporter","createJudgmentSpanExporter","setSpanKind","kind","currentSpan","trace","getActiveSpan","setAttribute","value","type","setLLMSpan","setToolSpan","setGeneralSpan","setAttributes","attributes","entries","setInput","input","setOutput","output","asyncEvaluate","scorer","example","model","isRecording","spanContext","traceId","spanId","name","evaluationRun","createEvaluationRun","enqueueEvaluation","asyncTraceEvaluate","traceEvaluationRun","createTraceEvaluationRun","traceEvalJson","String","evalName","now","modelName","scorerConfig","toTransport","eval_name","organization_id","trace_id","trace_span_id","endsWith","runId","examples","custom_scorers","judgment_scorers","_serializer","config","_apiClient","client","createExample","properties","example_id","undefined","created_at","ExampleParams","APIScorerType","createBaseScorer","score_type","class_name","addModel","successCheck","score","threshold","getRequiredParams","strict_mode","required_params","kwargs","createAPIScorer","scoreType","requiredParams","setThreshold","getScoreType","setRequiredParams","params","JudgmentAPIError","statusCode","async","pushPromptScorer","prompt","options","judgmentApiKey","isTrace","is_trace","fetchPromptScorer","names","scorers","length","updated_at","exists","BasePromptScorer","get","prototype","TRACE_PROMPT_SCORER","PROMPT_SCORER","create","updateThreshold","setPrompt","setOptions","appendToPrompt","promptAddition","getThreshold","getPrompt","getOptions","getName","getConfig","Array","isArray","PromptScorer","TracePromptScorer","ARROW_ARG","FN_ARGS","FN_ARG_SPLIT","FN_ARG","STRIP_COMMENTS","parseFunctionArgs","fn","args","fnText","Function","call","stringifyFn","match","extractArgs","split","map","arg","all","underscore","filter"],"sourceRoot":""}
|