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
|
@@ -1,798 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
-
};
|
|
37
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.JudgmentClient = void 0;
|
|
39
|
-
const dotenv = __importStar(require("dotenv"));
|
|
40
|
-
const axios_1 = __importDefault(require("axios"));
|
|
41
|
-
const example_js_1 = require("./data/example.js");
|
|
42
|
-
const result_js_1 = require("./data/result.js");
|
|
43
|
-
const base_scorer_js_1 = require("./scorers/base-scorer.js");
|
|
44
|
-
const evaluation_run_js_1 = require("./evaluation-run.js");
|
|
45
|
-
const rules_js_1 = require("./rules.js");
|
|
46
|
-
const run_evaluation_js_1 = require("./run-evaluation.js");
|
|
47
|
-
const constants_js_1 = require("./constants.js");
|
|
48
|
-
const logger_instance_js_1 = __importDefault(require("./common/logger-instance.js"));
|
|
49
|
-
// Keep progress bar imports if used elsewhere (e.g., waitForEvaluation)
|
|
50
|
-
const cli_progress_1 = __importDefault(require("cli-progress"));
|
|
51
|
-
const ansi_colors_1 = __importDefault(require("ansi-colors"));
|
|
52
|
-
const eval_dataset_client_js_1 = require("./data/datasets/eval-dataset-client.js");
|
|
53
|
-
// Load environment variables
|
|
54
|
-
dotenv.config();
|
|
55
|
-
/**
|
|
56
|
-
* Singleton implementation for JudgmentClient
|
|
57
|
-
*/
|
|
58
|
-
class JudgmentClient {
|
|
59
|
-
/**
|
|
60
|
-
* Get the singleton instance of JudgmentClient
|
|
61
|
-
*/
|
|
62
|
-
static getInstance(judgmentApiKey, organizationId) {
|
|
63
|
-
if (!JudgmentClient.instance) {
|
|
64
|
-
JudgmentClient.instance = new JudgmentClient(judgmentApiKey, organizationId);
|
|
65
|
-
}
|
|
66
|
-
return JudgmentClient.instance;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Constructor for JudgmentClient
|
|
70
|
-
* @param judgmentApiKey The Judgment API key
|
|
71
|
-
* @param organizationId The organization ID
|
|
72
|
-
*/
|
|
73
|
-
constructor(judgmentApiKey, organizationId) {
|
|
74
|
-
this.judgmentApiKey = judgmentApiKey || process.env.JUDGMENT_API_KEY || '';
|
|
75
|
-
this.organizationId = organizationId || process.env.JUDGMENT_ORG_ID || '';
|
|
76
|
-
// Keep this as direct output
|
|
77
|
-
console.log('Successfully initialized JudgmentClient!');
|
|
78
|
-
if (!this.judgmentApiKey) {
|
|
79
|
-
// Use logger for internal error, but throw for user
|
|
80
|
-
logger_instance_js_1.default.error('JUDGMENT_API_KEY is not set.');
|
|
81
|
-
throw new Error('Judgment API key is required. Set it in the constructor or as an environment variable JUDGMENT_API_KEY.');
|
|
82
|
-
}
|
|
83
|
-
if (!this.organizationId) {
|
|
84
|
-
throw new Error('Organization ID is required. Set it in the constructor or as an environment variable JUDGMENT_ORG_ID.');
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Run an evaluation asynchronously
|
|
89
|
-
*/
|
|
90
|
-
aRunEvaluation(examples_1, scorers_1, model_1, aggregator_1, metadata_1) {
|
|
91
|
-
return __awaiter(this, arguments, void 0, function* (examples, scorers, model, aggregator, metadata, logResults = true, projectName = 'default_project', evalRunName = 'default_eval_run', override = false, useJudgment = true, ignoreErrors = true, rules) {
|
|
92
|
-
// Simply call runEvaluation with asyncExecution=true
|
|
93
|
-
return this.runEvaluation(examples, scorers, model, aggregator, metadata, logResults, projectName, evalRunName, override, useJudgment, ignoreErrors, true, // Set asyncExecution to true
|
|
94
|
-
rules);
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Run an evaluation
|
|
99
|
-
*/
|
|
100
|
-
runEvaluation(examples_1, scorers_1, model_1, aggregator_1, metadata_1) {
|
|
101
|
-
return __awaiter(this, arguments, void 0, function* (examples, scorers, model, aggregator, metadata, logResults = true, projectName = 'default_project', evalRunName = 'default_eval_run', override = false, useJudgment = true, ignoreErrors = true, asyncExecution = false, rules) {
|
|
102
|
-
try {
|
|
103
|
-
// Load appropriate implementations for all scorers
|
|
104
|
-
const loadedScorers = [];
|
|
105
|
-
for (const scorer of scorers) {
|
|
106
|
-
try {
|
|
107
|
-
if (scorer instanceof base_scorer_js_1.ScorerWrapper) {
|
|
108
|
-
loadedScorers.push(scorer.loadImplementation(useJudgment));
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
// Assume scorers passed are already JudgevalScorer or APIJudgmentScorer
|
|
112
|
-
loadedScorers.push(scorer);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
catch (error) {
|
|
116
|
-
throw new Error(`Failed to load implementation for scorer ${scorer.constructor.name}: ${error instanceof Error ? error.message : String(error)}`);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
// Prevent using JudgevalScorer with rules - only APIJudgmentScorer allowed with rules
|
|
120
|
-
if (rules && loadedScorers.some(scorer => scorer instanceof base_scorer_js_1.JudgevalScorer)) {
|
|
121
|
-
throw new Error('Cannot use Judgeval scorers (only API scorers) when using rules. Please either remove rules or use only APIJudgmentScorer types.');
|
|
122
|
-
}
|
|
123
|
-
// Convert ScorerWrapper in rules to their implementations
|
|
124
|
-
let loadedRules;
|
|
125
|
-
if (rules) {
|
|
126
|
-
loadedRules = [];
|
|
127
|
-
for (const rule of rules) {
|
|
128
|
-
try {
|
|
129
|
-
const processedConditions = [];
|
|
130
|
-
for (const condition of rule.conditions) {
|
|
131
|
-
// Convert metric if it's a ScorerWrapper
|
|
132
|
-
if (condition.metric instanceof base_scorer_js_1.ScorerWrapper) {
|
|
133
|
-
try {
|
|
134
|
-
// Create a new Condition object with the loaded implementation
|
|
135
|
-
const loadedMetric = condition.metric.loadImplementation(useJudgment);
|
|
136
|
-
const newCondition = new rules_js_1.Condition(loadedMetric);
|
|
137
|
-
// Copy other properties from the original condition if necessary
|
|
138
|
-
// Example: newCondition.threshold = condition.threshold;
|
|
139
|
-
Object.assign(newCondition, Object.assign(Object.assign({}, condition), { metric: loadedMetric })); // Copy all properties, overriding metric
|
|
140
|
-
processedConditions.push(newCondition);
|
|
141
|
-
}
|
|
142
|
-
catch (error) {
|
|
143
|
-
throw new Error(`Failed to convert ScorerWrapper to implementation in rule '${rule.name}', condition metric '${condition.metric.constructor.name}': ${error instanceof Error ? error.message : String(error)}`);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
processedConditions.push(condition);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
// Create new rule with processed conditions
|
|
151
|
-
const newRule = new rules_js_1.Rule(rule.name, processedConditions, rule.combine_type, rule.description, rule.notification, rule.ruleId);
|
|
152
|
-
loadedRules.push(newRule);
|
|
153
|
-
}
|
|
154
|
-
catch (error) {
|
|
155
|
-
throw new Error(`Failed to process rule '${rule.name}': ${error instanceof Error ? error.message : String(error)}`);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
const evaluationRun = new evaluation_run_js_1.EvaluationRun({
|
|
160
|
-
logResults,
|
|
161
|
-
projectName,
|
|
162
|
-
evalName: evalRunName,
|
|
163
|
-
examples,
|
|
164
|
-
scorers: loadedScorers,
|
|
165
|
-
model,
|
|
166
|
-
aggregator,
|
|
167
|
-
metadata,
|
|
168
|
-
judgmentApiKey: this.judgmentApiKey,
|
|
169
|
-
rules: loadedRules,
|
|
170
|
-
organizationId: this.organizationId
|
|
171
|
-
});
|
|
172
|
-
return (0, run_evaluation_js_1.runEval)(evaluationRun, override, ignoreErrors, asyncExecution);
|
|
173
|
-
}
|
|
174
|
-
catch (error) {
|
|
175
|
-
if (error instanceof Error) {
|
|
176
|
-
if (error.message.includes('one or more fields are invalid')) {
|
|
177
|
-
throw new Error(`Please check your EvaluationRun object, one or more fields are invalid: \n${error.message}`);
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
throw new Error(`An unexpected error occurred during evaluation: ${error.message}`);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
throw new Error(`An unexpected error occurred during evaluation: ${String(error)}`);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Run an evaluation with a simplified interface (recommended)
|
|
191
|
-
* @param config Configuration object for the evaluation
|
|
192
|
-
* @returns Promise<ScoringResult[]> The evaluation results
|
|
193
|
-
*/
|
|
194
|
-
evaluate(config) {
|
|
195
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
196
|
-
// Set default values
|
|
197
|
-
const { examples, scorers, model = 'meta-llama/Meta-Llama-3-8B-Instruct-Turbo', aggregator = undefined, metadata = {}, projectName = 'default_project', evalName = `eval-run-${Date.now()}`, logResults = true, useJudgment = true, ignoreErrors = true, asyncExecution = false, rules = undefined, override = false } = config;
|
|
198
|
-
// Call the original runEvaluation method with the extracted parameters
|
|
199
|
-
return this.runEvaluation(examples, scorers, model, aggregator, metadata, logResults, projectName, evalName, override, useJudgment, ignoreErrors, asyncExecution, rules);
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Evaluate a dataset
|
|
204
|
-
*/
|
|
205
|
-
evaluateDataset(dataset_1, scorers_1, model_1, aggregator_1, metadata_1) {
|
|
206
|
-
return __awaiter(this, arguments, void 0, function* (dataset, // Keep type loose for stub
|
|
207
|
-
scorers, model, aggregator, metadata, projectName = 'default_project', evalRunName = 'default_eval_run', logResults = true, useJudgment = true, rules) {
|
|
208
|
-
// Keep type loose for stub
|
|
209
|
-
throw new Error('Not implemented in JudgmentClient. Use EvalDatasetClient.');
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Pull evaluation results from the server
|
|
214
|
-
*
|
|
215
|
-
* @param projectName Name of the project
|
|
216
|
-
* @param evalRunName Name of the evaluation run
|
|
217
|
-
* @returns Array of evaluation result objects with the same format as the Python SDK
|
|
218
|
-
*/
|
|
219
|
-
pullEval(projectName, evalRunName) {
|
|
220
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
221
|
-
const evalRunRequestBody = {
|
|
222
|
-
project_name: projectName,
|
|
223
|
-
eval_name: evalRunName,
|
|
224
|
-
judgment_api_key: this.judgmentApiKey
|
|
225
|
-
};
|
|
226
|
-
try {
|
|
227
|
-
logger_instance_js_1.default.info(`Pulling evaluation results for project '${projectName}', run '${evalRunName}'`);
|
|
228
|
-
const response = yield axios_1.default.post(constants_js_1.JUDGMENT_EVAL_FETCH_API_URL, evalRunRequestBody, {
|
|
229
|
-
headers: {
|
|
230
|
-
"Content-Type": "application/json",
|
|
231
|
-
"Authorization": `Bearer ${this.judgmentApiKey}`,
|
|
232
|
-
"X-Organization-Id": this.organizationId
|
|
233
|
-
}
|
|
234
|
-
});
|
|
235
|
-
// Ensure we return the data in the exact same format as the Python SDK
|
|
236
|
-
return response.data;
|
|
237
|
-
}
|
|
238
|
-
catch (error) {
|
|
239
|
-
if (axios_1.default.isAxiosError(error) && error.response) {
|
|
240
|
-
const errorMessage = `Error fetching eval results: ${JSON.stringify(error.response.data)}`;
|
|
241
|
-
logger_instance_js_1.default.error(errorMessage);
|
|
242
|
-
throw new Error(errorMessage);
|
|
243
|
-
}
|
|
244
|
-
else {
|
|
245
|
-
const errorMessage = `Unknown error during pullEval: ${error}`;
|
|
246
|
-
logger_instance_js_1.default.error(errorMessage);
|
|
247
|
-
throw error;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Retrieves evaluation results with retry mechanism
|
|
254
|
-
* @param projectName Name of the project
|
|
255
|
-
* @param evalRunName Name of the evaluation run
|
|
256
|
-
* @param options Configuration options for retries
|
|
257
|
-
* @returns The evaluation results or null if not available after all retries
|
|
258
|
-
*/
|
|
259
|
-
pullEvalWithRetry(projectName_1, evalRunName_1) {
|
|
260
|
-
return __awaiter(this, arguments, void 0, function* (projectName, evalRunName, options = {}) {
|
|
261
|
-
// Default options
|
|
262
|
-
const maxRetries = options.maxRetries || 3;
|
|
263
|
-
const initialDelayMs = options.initialDelayMs || 2000;
|
|
264
|
-
const maxDelayMs = options.maxDelayMs || 30000;
|
|
265
|
-
const backoffFactor = options.backoffFactor || 2;
|
|
266
|
-
let lastError = null;
|
|
267
|
-
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
268
|
-
try {
|
|
269
|
-
// Calculate delay with exponential backoff, capped at maxDelayMs
|
|
270
|
-
const delayMs = Math.min(initialDelayMs * Math.pow(backoffFactor, attempt), maxDelayMs);
|
|
271
|
-
if (attempt > 0) {
|
|
272
|
-
logger_instance_js_1.default.info(`Retry attempt ${attempt + 1}/${maxRetries} for pullEval after ${delayMs}ms delay`);
|
|
273
|
-
yield new Promise(resolve => setTimeout(resolve, delayMs));
|
|
274
|
-
}
|
|
275
|
-
const results = yield this.pullEval(projectName, evalRunName);
|
|
276
|
-
return results;
|
|
277
|
-
}
|
|
278
|
-
catch (error) {
|
|
279
|
-
lastError = error;
|
|
280
|
-
// Check if we should retry based on error type
|
|
281
|
-
if (axios_1.default.isAxiosError(error) && error.response) {
|
|
282
|
-
const status = error.response.status;
|
|
283
|
-
// Don't retry for client errors (except 429 Too Many Requests)
|
|
284
|
-
if (status >= 400 && status < 500 && status !== 429) {
|
|
285
|
-
logger_instance_js_1.default.error(`Not retrying due to client error: ${status}`);
|
|
286
|
-
throw error;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
logger_instance_js_1.default.warn(`Attempt ${attempt + 1} failed, ${attempt < maxRetries - 1 ? 'will retry' : 'giving up'}`);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
// If we get here, all retries failed
|
|
293
|
-
logger_instance_js_1.default.error(`All ${maxRetries} retry attempts failed for pullEval`);
|
|
294
|
-
throw lastError || new Error('Failed to retrieve evaluation results after all retry attempts');
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Export evaluation results to a file format
|
|
299
|
-
* @param projectName Name of the project
|
|
300
|
-
* @param evalRunName Name of the evaluation run
|
|
301
|
-
* @param format Export format ('json' or 'csv')
|
|
302
|
-
* @returns The exported data as a string
|
|
303
|
-
*/
|
|
304
|
-
exportEvalResults(projectName_1, evalRunName_1) {
|
|
305
|
-
return __awaiter(this, arguments, void 0, function* (projectName, evalRunName, format = 'json') {
|
|
306
|
-
logger_instance_js_1.default.info(`Exporting eval results for project '${projectName}', run '${evalRunName}' as ${format}`);
|
|
307
|
-
try {
|
|
308
|
-
const resultsData = yield this.pullEval(projectName, evalRunName);
|
|
309
|
-
if (!resultsData || resultsData.length === 0 || !resultsData[0].results) {
|
|
310
|
-
logger_instance_js_1.default.warn('No results found to export.');
|
|
311
|
-
return '';
|
|
312
|
-
}
|
|
313
|
-
const results = resultsData[0].results;
|
|
314
|
-
if (format === 'json') {
|
|
315
|
-
// Pretty print JSON
|
|
316
|
-
return JSON.stringify(results.map(r => r.toJSON()), null, 2);
|
|
317
|
-
}
|
|
318
|
-
else if (format === 'csv') {
|
|
319
|
-
if (results.length === 0)
|
|
320
|
-
return ''; // No data to export
|
|
321
|
-
// Dynamically determine headers from the first result object
|
|
322
|
-
// Flatten the structure for CSV
|
|
323
|
-
const flatResults = results.map(result => {
|
|
324
|
-
var _a, _b, _c;
|
|
325
|
-
const flat = {};
|
|
326
|
-
const exampleData = (_b = (_a = result.dataObject) === null || _a === void 0 ? void 0 : _a.toJSON()) !== null && _b !== void 0 ? _b : {}; // Use toJSON which gives snake_case
|
|
327
|
-
const scorersData = (_c = result.scorersData) !== null && _c !== void 0 ? _c : [];
|
|
328
|
-
// Add example data fields (snake_case)
|
|
329
|
-
for (const key in exampleData) {
|
|
330
|
-
// Prefix example fields to avoid collision, e.g., example_input
|
|
331
|
-
flat[`example_${key}`] = exampleData[key];
|
|
332
|
-
}
|
|
333
|
-
// Add scorers data
|
|
334
|
-
scorersData.forEach(scorer => {
|
|
335
|
-
flat[`scorer_${scorer.name}_score`] = scorer.score;
|
|
336
|
-
flat[`scorer_${scorer.name}_additional_metadata`] = JSON.stringify(scorer.additional_metadata);
|
|
337
|
-
flat[`scorer_${scorer.name}_error`] = scorer.error;
|
|
338
|
-
});
|
|
339
|
-
// Add top-level error if present
|
|
340
|
-
flat['top_level_error'] = result.error;
|
|
341
|
-
return flat;
|
|
342
|
-
});
|
|
343
|
-
// Get all unique keys from the flattened results for headers
|
|
344
|
-
const headers = Array.from(new Set(flatResults.flatMap(Object.keys)));
|
|
345
|
-
// Use papaparse for robust CSV generation
|
|
346
|
-
const Papa = require('papaparse'); // Use require here if not imported at top
|
|
347
|
-
const csv = Papa.unparse({
|
|
348
|
-
fields: headers,
|
|
349
|
-
data: flatResults
|
|
350
|
-
}, {
|
|
351
|
-
header: true,
|
|
352
|
-
quotes: true, // Ensure fields with commas/newlines are quoted
|
|
353
|
-
quoteChar: '"',
|
|
354
|
-
escapeChar: '"',
|
|
355
|
-
delimiter: ','
|
|
356
|
-
});
|
|
357
|
-
return csv;
|
|
358
|
-
}
|
|
359
|
-
else {
|
|
360
|
-
throw new Error(`Unsupported export format: ${format}`);
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
catch (error) {
|
|
364
|
-
logger_instance_js_1.default.error(`Error exporting eval results: ${error}`);
|
|
365
|
-
this.handleApiError(error, 'exportEvalResults');
|
|
366
|
-
throw error;
|
|
367
|
-
}
|
|
368
|
-
});
|
|
369
|
-
}
|
|
370
|
-
/**
|
|
371
|
-
* Delete an evaluation from the server
|
|
372
|
-
*/
|
|
373
|
-
deleteEval(projectName, evalRunNames) {
|
|
374
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
375
|
-
logger_instance_js_1.default.info(`Deleting eval runs: ${evalRunNames.join(', ')} from project: ${projectName}`);
|
|
376
|
-
const requestBody = {
|
|
377
|
-
project_name: projectName,
|
|
378
|
-
eval_names: evalRunNames,
|
|
379
|
-
judgment_api_key: this.judgmentApiKey,
|
|
380
|
-
};
|
|
381
|
-
try {
|
|
382
|
-
yield axios_1.default.post(constants_js_1.JUDGMENT_EVAL_DELETE_API_URL, requestBody, {
|
|
383
|
-
headers: this.getAuthHeaders()
|
|
384
|
-
});
|
|
385
|
-
logger_instance_js_1.default.info('Successfully deleted eval runs.');
|
|
386
|
-
return true;
|
|
387
|
-
}
|
|
388
|
-
catch (error) {
|
|
389
|
-
logger_instance_js_1.default.error(`Error deleting eval runs: ${error}`);
|
|
390
|
-
this.handleApiError(error, 'deleteEval');
|
|
391
|
-
return false;
|
|
392
|
-
}
|
|
393
|
-
});
|
|
394
|
-
}
|
|
395
|
-
/**
|
|
396
|
-
* Delete all evaluations from the server for a given project
|
|
397
|
-
*/
|
|
398
|
-
deleteProjectEvals(projectName) {
|
|
399
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
400
|
-
logger_instance_js_1.default.info(`Deleting ALL eval runs for project: ${projectName}`);
|
|
401
|
-
const requestBody = {
|
|
402
|
-
project_name: projectName,
|
|
403
|
-
judgment_api_key: this.judgmentApiKey,
|
|
404
|
-
};
|
|
405
|
-
try {
|
|
406
|
-
yield axios_1.default.post(constants_js_1.JUDGMENT_EVAL_DELETE_PROJECT_API_URL, requestBody, {
|
|
407
|
-
headers: this.getAuthHeaders()
|
|
408
|
-
});
|
|
409
|
-
logger_instance_js_1.default.info(`Successfully deleted all eval runs for project ${projectName}.`);
|
|
410
|
-
return true;
|
|
411
|
-
}
|
|
412
|
-
catch (error) {
|
|
413
|
-
logger_instance_js_1.default.error(`Error deleting project evals: ${error}`);
|
|
414
|
-
this.handleApiError(error, 'deleteProjectEvals');
|
|
415
|
-
return false;
|
|
416
|
-
}
|
|
417
|
-
});
|
|
418
|
-
}
|
|
419
|
-
/**
|
|
420
|
-
* Create a project on the server
|
|
421
|
-
*/
|
|
422
|
-
createProject(projectName) {
|
|
423
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
424
|
-
logger_instance_js_1.default.info(`Creating project: ${projectName}`);
|
|
425
|
-
const requestBody = {
|
|
426
|
-
project_name: projectName,
|
|
427
|
-
judgment_api_key: this.judgmentApiKey,
|
|
428
|
-
};
|
|
429
|
-
try {
|
|
430
|
-
logger_instance_js_1.default.info(`Creating project: ${projectName}`);
|
|
431
|
-
const response = yield axios_1.default.post(constants_js_1.JUDGMENT_PROJECT_CREATE_API_URL, requestBody, {
|
|
432
|
-
headers: this.getAuthHeaders()
|
|
433
|
-
});
|
|
434
|
-
// Check for specific success message or status if API provides one
|
|
435
|
-
if (response.data && response.data.message === 'Project added successfully') {
|
|
436
|
-
logger_instance_js_1.default.info(`Successfully created project: ${projectName}`);
|
|
437
|
-
return true;
|
|
438
|
-
}
|
|
439
|
-
else if (response.data && response.data.message === 'Project already exists') {
|
|
440
|
-
logger_instance_js_1.default.warn(`Project '${projectName}' already exists.`);
|
|
441
|
-
return true; // Or false, depending on desired behavior for existing projects
|
|
442
|
-
}
|
|
443
|
-
else {
|
|
444
|
-
logger_instance_js_1.default.error(`Failed to create project '${projectName}'. Response: ${JSON.stringify(response.data)}`);
|
|
445
|
-
return false;
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
catch (error) {
|
|
449
|
-
logger_instance_js_1.default.error(`Error creating project: ${error}`);
|
|
450
|
-
this.handleApiError(error, 'createProject');
|
|
451
|
-
return false;
|
|
452
|
-
}
|
|
453
|
-
});
|
|
454
|
-
}
|
|
455
|
-
/**
|
|
456
|
-
* Delete a project from the server
|
|
457
|
-
*/
|
|
458
|
-
deleteProject(projectName) {
|
|
459
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
460
|
-
logger_instance_js_1.default.info(`Deleting project: ${projectName}`);
|
|
461
|
-
const requestBody = {
|
|
462
|
-
project_name: projectName,
|
|
463
|
-
judgment_api_key: this.judgmentApiKey,
|
|
464
|
-
};
|
|
465
|
-
try {
|
|
466
|
-
const response = yield axios_1.default.post(constants_js_1.JUDGMENT_PROJECT_DELETE_API_URL, requestBody, {
|
|
467
|
-
headers: this.getAuthHeaders()
|
|
468
|
-
});
|
|
469
|
-
if (response.data && response.data.message === 'Project deleted successfully') {
|
|
470
|
-
logger_instance_js_1.default.info(`Successfully deleted project: ${projectName}`);
|
|
471
|
-
return true;
|
|
472
|
-
}
|
|
473
|
-
else {
|
|
474
|
-
logger_instance_js_1.default.error(`Failed to delete project '${projectName}'. Response: ${JSON.stringify(response.data)}`);
|
|
475
|
-
return false;
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
catch (error) {
|
|
479
|
-
logger_instance_js_1.default.error(`Error deleting project: ${error}`);
|
|
480
|
-
this.handleApiError(error, 'deleteProject');
|
|
481
|
-
return false;
|
|
482
|
-
}
|
|
483
|
-
});
|
|
484
|
-
}
|
|
485
|
-
/**
|
|
486
|
-
* Validate that the user API key is valid
|
|
487
|
-
*/
|
|
488
|
-
validateApiKey() {
|
|
489
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
490
|
-
var _a, _b, _c, _d;
|
|
491
|
-
logger_instance_js_1.default.debug('Validating API Key...');
|
|
492
|
-
try {
|
|
493
|
-
// Instantiate EvalDatasetClient to perform the validation call
|
|
494
|
-
const datasetClient = new eval_dataset_client_js_1.EvalDatasetClient(this.judgmentApiKey, this.organizationId);
|
|
495
|
-
// Use the dataset client to make the call
|
|
496
|
-
yield datasetClient.pullProjectDatasetStats('__api_key_validation__');
|
|
497
|
-
logger_instance_js_1.default.debug('API Key appears valid.');
|
|
498
|
-
return [true, 'API Key is valid.'];
|
|
499
|
-
}
|
|
500
|
-
catch (error) {
|
|
501
|
-
let message = 'API Key validation failed.';
|
|
502
|
-
if (axios_1.default.isAxiosError(error)) {
|
|
503
|
-
if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 401 || ((_b = error.response) === null || _b === void 0 ? void 0 : _b.status) === 403) {
|
|
504
|
-
message = 'API Key is invalid or expired.';
|
|
505
|
-
}
|
|
506
|
-
else if (((_c = error.response) === null || _c === void 0 ? void 0 : _c.status) === 404) {
|
|
507
|
-
// If validation endpoint returns 404, key might be valid but endpoint wrong/project not found
|
|
508
|
-
// This depends on the specific validation endpoint behavior
|
|
509
|
-
message = 'API Key might be valid, but validation endpoint returned 404.';
|
|
510
|
-
}
|
|
511
|
-
else {
|
|
512
|
-
message = `API Key validation failed with status ${(_d = error.response) === null || _d === void 0 ? void 0 : _d.status}: ${error.message}`;
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
else {
|
|
516
|
-
message = `API Key validation failed: ${String(error)}`;
|
|
517
|
-
}
|
|
518
|
-
logger_instance_js_1.default.error(message);
|
|
519
|
-
return [false, message];
|
|
520
|
-
}
|
|
521
|
-
});
|
|
522
|
-
}
|
|
523
|
-
/**
|
|
524
|
-
* Assert a test by running the evaluation and checking the results for success
|
|
525
|
-
*/
|
|
526
|
-
assertTest(examples_1, scorers_1, model_1, aggregator_1, metadata_1) {
|
|
527
|
-
return __awaiter(this, arguments, void 0, function* (examples, scorers, // Type matches Python's intent
|
|
528
|
-
model, aggregator, metadata, logResults = true, projectName = 'default_project', evalRunName = 'default_eval_run', override = false, rules) {
|
|
529
|
-
const results = yield this.runEvaluation(examples, scorers, model, aggregator, metadata, logResults, projectName, evalRunName, override, true, // useJudgment = true (necessary if API scorers or rules are involved)
|
|
530
|
-
false, // ignoreErrors = false for assert
|
|
531
|
-
false, // asyncExecution = false
|
|
532
|
-
rules);
|
|
533
|
-
(0, run_evaluation_js_1.assertTest)(results); // Assumes assertTest handles ScoringResult[]
|
|
534
|
-
});
|
|
535
|
-
}
|
|
536
|
-
/**
|
|
537
|
-
* Pull the results of an evaluation run. Matches `pullEval` logic but returns only the ScoringResult array.
|
|
538
|
-
* @param projectName The name of the project
|
|
539
|
-
* @param evalRunName The name of the evaluation run
|
|
540
|
-
* @returns Array of ScoringResult objects
|
|
541
|
-
*/
|
|
542
|
-
pullEvalResults(projectName, evalRunName) {
|
|
543
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
544
|
-
var _a;
|
|
545
|
-
// Get the raw API response
|
|
546
|
-
const rawResults = yield this.pullEval(projectName, evalRunName);
|
|
547
|
-
// Ensure proper handling of empty results
|
|
548
|
-
if (!rawResults || !Array.isArray(rawResults) || rawResults.length === 0) {
|
|
549
|
-
return [];
|
|
550
|
-
}
|
|
551
|
-
// Process the results to match Python SDK format
|
|
552
|
-
const scoringResults = [];
|
|
553
|
-
for (const item of rawResults) {
|
|
554
|
-
if (item.result && item.result.scorers_data && Array.isArray(item.result.scorers_data)) {
|
|
555
|
-
// Extract example data if available
|
|
556
|
-
const exampleData = item.examples && item.examples.length > 0 ? item.examples[0] : null;
|
|
557
|
-
// Create an Example object with the data from the API
|
|
558
|
-
const example = new example_js_1.Example({
|
|
559
|
-
input: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.input) || '',
|
|
560
|
-
actualOutput: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.actual_output) || '',
|
|
561
|
-
expectedOutput: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.expected_output) || '',
|
|
562
|
-
context: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.context) || null,
|
|
563
|
-
retrievalContext: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.retrieval_context) || null,
|
|
564
|
-
additionalMetadata: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.additional_metadata) || {},
|
|
565
|
-
toolsCalled: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.tools_called) || null,
|
|
566
|
-
expectedTools: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.expected_tools) || null,
|
|
567
|
-
exampleId: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.example_id) || null,
|
|
568
|
-
name: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.name) || 'example',
|
|
569
|
-
exampleIndex: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.example_index) || 0,
|
|
570
|
-
timestamp: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.created_at) || new Date().toISOString(),
|
|
571
|
-
traceId: ((_a = item.result) === null || _a === void 0 ? void 0 : _a.trace_id) || null
|
|
572
|
-
});
|
|
573
|
-
// Create a ScoringResult using the builder pattern
|
|
574
|
-
const scoringResult = result_js_1.ScoringResult.builder()
|
|
575
|
-
.dataObject(example)
|
|
576
|
-
.scorersData(item.result.scorers_data)
|
|
577
|
-
.build();
|
|
578
|
-
scoringResults.push(scoringResult);
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
return scoringResults;
|
|
582
|
-
});
|
|
583
|
-
}
|
|
584
|
-
/**
|
|
585
|
-
* Check the status of an evaluation run using the fetch endpoint.
|
|
586
|
-
* This is a heuristic approach as the endpoint might return full results or status info.
|
|
587
|
-
* @param projectName The name of the project
|
|
588
|
-
* @param evalRunName The name of the evaluation run
|
|
589
|
-
* @returns An object representing the status { status: string, progress: number, message: string }
|
|
590
|
-
*/
|
|
591
|
-
checkEvalStatus(projectName, evalRunName) {
|
|
592
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
593
|
-
var _a;
|
|
594
|
-
const requestBody = {
|
|
595
|
-
project_name: projectName,
|
|
596
|
-
eval_name: evalRunName,
|
|
597
|
-
judgment_api_key: this.judgmentApiKey,
|
|
598
|
-
};
|
|
599
|
-
try {
|
|
600
|
-
const response = yield axios_1.default.post(constants_js_1.JUDGMENT_EVAL_FETCH_API_URL, requestBody, {
|
|
601
|
-
headers: this.getAuthHeaders(),
|
|
602
|
-
// Add a shorter timeout for status checks?
|
|
603
|
-
// timeout: 5000
|
|
604
|
-
});
|
|
605
|
-
const data = response.data;
|
|
606
|
-
// Check if the response looks like a status object
|
|
607
|
-
if (data && typeof data.status === 'string') {
|
|
608
|
-
return {
|
|
609
|
-
status: data.status || 'unknown',
|
|
610
|
-
progress: typeof data.progress === 'number' ? data.progress : 0,
|
|
611
|
-
message: data.message || '',
|
|
612
|
-
error: data.error
|
|
613
|
-
};
|
|
614
|
-
}
|
|
615
|
-
// Check if the response looks like completed results (array format from pullEval)
|
|
616
|
-
else if (Array.isArray(data) && data.length > 0 && data[0].results) {
|
|
617
|
-
return {
|
|
618
|
-
status: 'completed',
|
|
619
|
-
progress: 100,
|
|
620
|
-
message: 'Evaluation completed.'
|
|
621
|
-
};
|
|
622
|
-
}
|
|
623
|
-
// Check if response looks like completed results (single object format)
|
|
624
|
-
else if (data && typeof data.id === 'string' && Array.isArray(data.results)) { // Adjust based on actual API response for single result fetch
|
|
625
|
-
return {
|
|
626
|
-
status: 'completed',
|
|
627
|
-
progress: 100,
|
|
628
|
-
message: 'Evaluation completed.'
|
|
629
|
-
};
|
|
630
|
-
}
|
|
631
|
-
// Handle other potential responses or assume pending/unknown
|
|
632
|
-
else {
|
|
633
|
-
logger_instance_js_1.default.warn(`Unexpected response format when checking status for ${evalRunName}:`, data);
|
|
634
|
-
return {
|
|
635
|
-
status: 'unknown',
|
|
636
|
-
progress: 0,
|
|
637
|
-
message: 'Could not determine status from API response.'
|
|
638
|
-
};
|
|
639
|
-
}
|
|
640
|
-
}
|
|
641
|
-
catch (error) {
|
|
642
|
-
// Don't throw here, return status indicating error
|
|
643
|
-
let errorMessage = 'Failed to fetch evaluation status.';
|
|
644
|
-
let status = 'error';
|
|
645
|
-
if (axios_1.default.isAxiosError(error) && ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
|
|
646
|
-
status = 'not_found';
|
|
647
|
-
errorMessage = 'Evaluation run not found.';
|
|
648
|
-
logger_instance_js_1.default.warn(`Evaluation run ${evalRunName} not found.`);
|
|
649
|
-
}
|
|
650
|
-
else {
|
|
651
|
-
this.handleApiError(error, 'checkEvalStatus');
|
|
652
|
-
errorMessage = `Error fetching status: ${String(error)}`;
|
|
653
|
-
}
|
|
654
|
-
return {
|
|
655
|
-
status: status,
|
|
656
|
-
progress: 0,
|
|
657
|
-
message: errorMessage,
|
|
658
|
-
error: String(error) // Include error string
|
|
659
|
-
};
|
|
660
|
-
}
|
|
661
|
-
});
|
|
662
|
-
}
|
|
663
|
-
/**
|
|
664
|
-
* Wait for an async evaluation to complete and return the results
|
|
665
|
-
* @param projectName The name of the project
|
|
666
|
-
* @param evalRunName The name of the evaluation run
|
|
667
|
-
* @param options Optional configuration for polling: intervalMs, maxAttempts, showProgress
|
|
668
|
-
* @returns The evaluation results as ScoringResult[] or empty array on timeout/failure.
|
|
669
|
-
*/
|
|
670
|
-
waitForEvaluation(projectName_1, evalRunName_1) {
|
|
671
|
-
return __awaiter(this, arguments, void 0, function* (projectName, evalRunName, options = {}) {
|
|
672
|
-
const { intervalMs = 5000, maxAttempts = 120, showProgress = true } = options; // Default: check every 5s for 10 mins
|
|
673
|
-
let progressBar;
|
|
674
|
-
if (showProgress) {
|
|
675
|
-
progressBar = new cli_progress_1.default.SingleBar({
|
|
676
|
-
format: `Waiting for ${ansi_colors_1.default.magenta(evalRunName)}... | ${ansi_colors_1.default.cyan('{bar}')} | {percentage}% || {status}`,
|
|
677
|
-
barCompleteChar: '\u2588',
|
|
678
|
-
barIncompleteChar: '\u2591',
|
|
679
|
-
hideCursor: true,
|
|
680
|
-
clearOnComplete: false,
|
|
681
|
-
stopOnComplete: true,
|
|
682
|
-
}, cli_progress_1.default.Presets.shades_classic);
|
|
683
|
-
progressBar.start(100, 0, { status: 'Initiating...' });
|
|
684
|
-
}
|
|
685
|
-
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
686
|
-
try {
|
|
687
|
-
const statusResult = yield this.checkEvalStatus(projectName, evalRunName);
|
|
688
|
-
const progress = Math.max(0, Math.min(100, statusResult.progress || 0)); // Clamp progress
|
|
689
|
-
const statusText = statusResult.message || statusResult.status;
|
|
690
|
-
if (progressBar) {
|
|
691
|
-
progressBar.update(progress, { status: statusText });
|
|
692
|
-
}
|
|
693
|
-
if (statusResult.status === 'completed') {
|
|
694
|
-
if (progressBar) {
|
|
695
|
-
progressBar.update(100, { status: ansi_colors_1.default.green('Completed! Fetching results...') });
|
|
696
|
-
}
|
|
697
|
-
// Fetch final results using pullEval
|
|
698
|
-
const finalResults = yield this.pullEvalResults(projectName, evalRunName);
|
|
699
|
-
logger_instance_js_1.default.info(`Evaluation run ${evalRunName} completed successfully.`);
|
|
700
|
-
return finalResults;
|
|
701
|
-
}
|
|
702
|
-
else if (statusResult.status === 'error' || statusResult.status === 'failed') {
|
|
703
|
-
// Concatenate error details into a single message string
|
|
704
|
-
const errorMsg = `Evaluation run ${evalRunName} failed or encountered an error: ${statusResult.error ? String(statusResult.error) : statusResult.message}`;
|
|
705
|
-
logger_instance_js_1.default.error(errorMsg);
|
|
706
|
-
if (progressBar)
|
|
707
|
-
progressBar.stop();
|
|
708
|
-
// Pass only the combined message to the constructor
|
|
709
|
-
throw new run_evaluation_js_1.JudgmentAPIError(errorMsg);
|
|
710
|
-
}
|
|
711
|
-
else if (statusResult.status === 'not_found') {
|
|
712
|
-
const errorMsg = `Evaluation run ${evalRunName} not found.`;
|
|
713
|
-
logger_instance_js_1.default.error(errorMsg);
|
|
714
|
-
if (progressBar)
|
|
715
|
-
progressBar.stop();
|
|
716
|
-
// Pass only the message to the constructor
|
|
717
|
-
throw new run_evaluation_js_1.JudgmentAPIError(errorMsg);
|
|
718
|
-
}
|
|
719
|
-
// Wait for the next interval
|
|
720
|
-
yield new Promise(resolve => setTimeout(resolve, intervalMs));
|
|
721
|
-
}
|
|
722
|
-
catch (error) {
|
|
723
|
-
// Handle errors during the wait loop (e.g., network issues during checkEvalStatus)
|
|
724
|
-
logger_instance_js_1.default.error(`Error during waitForEvaluation loop (attempt ${attempt}): ${error}`);
|
|
725
|
-
// Option: Rethrow immediately vs. retry vs. specific handling
|
|
726
|
-
if (error instanceof run_evaluation_js_1.JudgmentAPIError) { // If it was already a processed API error, rethrow
|
|
727
|
-
if (progressBar)
|
|
728
|
-
progressBar.stop();
|
|
729
|
-
throw error;
|
|
730
|
-
}
|
|
731
|
-
// For other errors, wait and retry (up to maxAttempts)
|
|
732
|
-
if (attempt === maxAttempts) {
|
|
733
|
-
if (progressBar)
|
|
734
|
-
progressBar.stop();
|
|
735
|
-
throw new Error(`waitForEvaluation failed after ${maxAttempts} attempts: ${error}`);
|
|
736
|
-
}
|
|
737
|
-
// Still retryable, wait for interval
|
|
738
|
-
yield new Promise(resolve => setTimeout(resolve, intervalMs));
|
|
739
|
-
}
|
|
740
|
-
}
|
|
741
|
-
// If loop finishes without completion or error
|
|
742
|
-
if (progressBar)
|
|
743
|
-
progressBar.stop();
|
|
744
|
-
throw new Error(`Evaluation run ${evalRunName} did not complete after ${maxAttempts} attempts.`);
|
|
745
|
-
});
|
|
746
|
-
}
|
|
747
|
-
/**
|
|
748
|
-
* Create a simple ASCII progress bar
|
|
749
|
-
* @param percent The percentage to display (0-100)
|
|
750
|
-
* @returns A string representing the progress bar
|
|
751
|
-
*/
|
|
752
|
-
_createProgressBar(percent) {
|
|
753
|
-
const width = 20; // Width of the progress bar
|
|
754
|
-
const filled = Math.round(width * (percent / 100));
|
|
755
|
-
const empty = width - filled;
|
|
756
|
-
return `[${'#'.repeat(filled)}${'.'.repeat(empty)}] ${percent.toFixed(1)}%`;
|
|
757
|
-
}
|
|
758
|
-
// Keep helper methods private
|
|
759
|
-
getAuthHeaders() {
|
|
760
|
-
return {
|
|
761
|
-
'Content-Type': 'application/json',
|
|
762
|
-
'Authorization': `Bearer ${this.judgmentApiKey}`,
|
|
763
|
-
'X-Organization-Id': this.organizationId,
|
|
764
|
-
};
|
|
765
|
-
}
|
|
766
|
-
// Ensure this handles errors from Eval/Project API calls correctly
|
|
767
|
-
handleApiError(error, context) {
|
|
768
|
-
logger_instance_js_1.default.error(`API Error during ${context}:`);
|
|
769
|
-
if (axios_1.default.isAxiosError(error)) {
|
|
770
|
-
const axiosError = error;
|
|
771
|
-
const response = axiosError.response;
|
|
772
|
-
if (response) {
|
|
773
|
-
logger_instance_js_1.default.error(`Status: ${response.status} ${response.statusText}`);
|
|
774
|
-
logger_instance_js_1.default.debug('Response Data:', response.data);
|
|
775
|
-
if (response.status === 422) {
|
|
776
|
-
logger_instance_js_1.default.error('Validation Error Detail:', response.data);
|
|
777
|
-
}
|
|
778
|
-
else if (context === 'pullEval' && response.status === 404) { // Keep eval-specific handling
|
|
779
|
-
logger_instance_js_1.default.error(`Evaluation run not found.`);
|
|
780
|
-
}
|
|
781
|
-
else if (context.startsWith('delete') && response.status === 404) { // Keep generic delete handling
|
|
782
|
-
logger_instance_js_1.default.warn(`${context}: Resource not found, may have already been deleted.`);
|
|
783
|
-
}
|
|
784
|
-
}
|
|
785
|
-
else if (axiosError.request) {
|
|
786
|
-
logger_instance_js_1.default.error('No response received from server.');
|
|
787
|
-
}
|
|
788
|
-
else {
|
|
789
|
-
logger_instance_js_1.default.error(`Error setting up API request for ${context}`);
|
|
790
|
-
}
|
|
791
|
-
}
|
|
792
|
-
else {
|
|
793
|
-
logger_instance_js_1.default.error(`Unexpected error during ${context}`);
|
|
794
|
-
}
|
|
795
|
-
}
|
|
796
|
-
}
|
|
797
|
-
exports.JudgmentClient = JudgmentClient;
|
|
798
|
-
//# sourceMappingURL=judgment-client.js.map
|