@opensearch-project/agent-health 0.4.0 → 0.6.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/README.md +36 -5
- package/cli/dist/index.js +8292 -2938
- package/deployment/cloudformation/agent-health-observability.yaml +223 -32
- package/dist/assets/index-BfxtxmKc.css +1 -0
- package/dist/assets/index-CrjAfDHu.js +243 -0
- package/dist/index.html +2 -2
- package/docs/ARCHITECTURE.md +450 -0
- package/docs/BACKEND_JOB_QUEUE.md +405 -0
- package/docs/CLAUDE_CODE_TELEMETRY.md +283 -0
- package/docs/CLI.md +474 -0
- package/docs/CODING_AGENT_ANALYTICS.md +298 -0
- package/docs/CONFIGURATION.md +388 -0
- package/docs/CONNECTORS.md +536 -0
- package/docs/INSTRUMENT_WITH_OTEL.md +397 -0
- package/docs/ML-COMMONS-SETUP.md +289 -0
- package/docs/NPX_PACKAGING.md +195 -0
- package/docs/PERFORMANCE-MONITORING.md +200 -0
- package/docs/PERFORMANCE.md +390 -0
- package/docs/PI_PROFILING.md +169 -0
- package/docs/PLAN-non-agui-agent-support.md +525 -0
- package/docs/SDK.md +626 -0
- package/docs/SKILLS.md +264 -0
- package/docs/STORAGE_INDEX_FIELD_LIMITS.md +216 -0
- package/docs/blogs/2026-02-28-opensearch-agent-health.md +200 -0
- package/docs/blogs/getting-started-blog.md +608 -0
- package/docs/diagrams/Agent-health.excalidraw +5656 -0
- package/docs/diagrams/architecture.png +0 -0
- package/docs/plans/field-redesign.md +468 -0
- package/docs/rfcs/001-coding-agent-analytics.md +374 -0
- package/docs/rfcs/002-enterprise-leaderboard.md +267 -0
- package/docs/rfcs/003-remote-aggregation.md +146 -0
- package/docs/rfcs/004-test-sdk-v2.md +599 -0
- package/docs/skills/AGENT_HEALTH.md +652 -0
- package/docs/skills/AGENT_PROFILE.md +191 -0
- package/docs/skills/add-connector/SKILL.md +68 -0
- package/docs/skills/agent-health-profile/SKILL.md +40 -0
- package/docs/skills/config-auth/SKILL.md +194 -0
- package/docs/skills/config-auth/evals/evals.json +35 -0
- package/docs/skills/create-pr/SKILL.md +73 -0
- package/docs/skills/instrument-otel/SKILL.md +84 -0
- package/docs/skills/write-test/SKILL.md +124 -0
- package/docs/ui prd.md +376 -0
- package/examples/README.md +53 -0
- package/examples/config/agent-health.config.example.ts +155 -0
- package/examples/connectors/echo-connector.ts +131 -0
- package/examples/eval-files/demo.eval.js +128 -0
- package/examples/eval-files/ops-rca-classification.eval.js +71 -0
- package/examples/eval-files/ops-rca-evaluator.json +15 -0
- package/examples/eval-files/sdk-demo.eval.js +72 -0
- package/examples/eval-files/sdk-describe-demo.eval.js +50 -0
- package/examples/eval-files/sdk-hooks-demo.eval.js +99 -0
- package/examples/pi-profiling/README.md +77 -0
- package/examples/pi-profiling/agent-health-profile.ts +417 -0
- package/lib/dist/lib/agentUtils.d.ts +29 -0
- package/lib/dist/lib/agentUtils.d.ts.map +1 -0
- package/lib/dist/lib/agentUtils.js +43 -0
- package/lib/dist/lib/agentUtils.js.map +1 -0
- package/lib/dist/lib/bedrockCompat.d.ts +27 -0
- package/lib/dist/lib/bedrockCompat.d.ts.map +1 -0
- package/lib/dist/lib/bedrockCompat.js +83 -0
- package/lib/dist/lib/bedrockCompat.js.map +1 -0
- package/lib/dist/lib/benchmarkExport.d.ts +14 -0
- package/lib/dist/lib/benchmarkExport.d.ts.map +1 -0
- package/lib/dist/lib/benchmarkExport.js +41 -0
- package/lib/dist/lib/benchmarkExport.js.map +1 -0
- package/lib/dist/lib/benchmarkImage.d.ts +52 -0
- package/lib/dist/lib/benchmarkImage.d.ts.map +1 -0
- package/lib/dist/lib/benchmarkImage.js +113 -0
- package/lib/dist/lib/benchmarkImage.js.map +1 -0
- package/lib/dist/lib/benchmarkVersionUtils.d.ts +50 -0
- package/lib/dist/lib/benchmarkVersionUtils.d.ts.map +1 -0
- package/lib/dist/lib/benchmarkVersionUtils.js +89 -0
- package/lib/dist/lib/benchmarkVersionUtils.js.map +1 -0
- package/lib/dist/lib/chunkedFetch.d.ts +18 -0
- package/lib/dist/lib/chunkedFetch.d.ts.map +1 -0
- package/lib/dist/lib/chunkedFetch.js +40 -0
- package/lib/dist/lib/chunkedFetch.js.map +1 -0
- package/lib/dist/lib/comparisonInsights.d.ts +104 -0
- package/lib/dist/lib/comparisonInsights.d.ts.map +1 -0
- package/lib/dist/lib/comparisonInsights.js +212 -0
- package/lib/dist/lib/comparisonInsights.js.map +1 -0
- package/lib/dist/lib/config/defineConfig.d.ts +27 -0
- package/lib/dist/lib/config/defineConfig.d.ts.map +1 -0
- package/lib/dist/lib/config/defineConfig.js +28 -0
- package/lib/dist/lib/config/defineConfig.js.map +1 -0
- package/lib/dist/lib/config/index.d.ts +9 -0
- package/lib/dist/lib/config/index.d.ts.map +1 -0
- package/lib/dist/lib/config/index.js +8 -0
- package/lib/dist/lib/config/index.js.map +1 -0
- package/lib/dist/lib/config/loader.d.ts +39 -0
- package/lib/dist/lib/config/loader.d.ts.map +1 -0
- package/lib/dist/lib/config/loader.js +263 -0
- package/lib/dist/lib/config/loader.js.map +1 -0
- package/lib/dist/lib/config/statePaths.d.ts +61 -0
- package/lib/dist/lib/config/statePaths.d.ts.map +1 -0
- package/lib/dist/lib/config/statePaths.js +188 -0
- package/lib/dist/lib/config/statePaths.js.map +1 -0
- package/lib/dist/lib/config/types.d.ts +245 -0
- package/lib/dist/lib/config/types.d.ts.map +1 -0
- package/lib/dist/lib/config/types.js +6 -0
- package/lib/dist/lib/config/types.js.map +1 -0
- package/lib/dist/lib/config.d.ts +39 -0
- package/lib/dist/lib/config.d.ts.map +1 -0
- package/lib/dist/lib/config.js +118 -0
- package/lib/dist/lib/config.js.map +1 -0
- package/lib/dist/lib/constants.d.ts +81 -0
- package/lib/dist/lib/constants.d.ts.map +1 -0
- package/lib/dist/lib/constants.js +374 -0
- package/lib/dist/lib/constants.js.map +1 -0
- package/lib/dist/lib/contextFormat.d.ts +26 -0
- package/lib/dist/lib/contextFormat.d.ts.map +1 -0
- package/lib/dist/lib/contextFormat.js +28 -0
- package/lib/dist/lib/contextFormat.js.map +1 -0
- package/lib/dist/lib/contextUtilization.d.ts +23 -0
- package/lib/dist/lib/contextUtilization.d.ts.map +1 -0
- package/lib/dist/lib/contextUtilization.js +72 -0
- package/lib/dist/lib/contextUtilization.js.map +1 -0
- package/lib/dist/lib/dashboardMetrics.d.ts +87 -0
- package/lib/dist/lib/dashboardMetrics.d.ts.map +1 -0
- package/lib/dist/lib/dashboardMetrics.js +242 -0
- package/lib/dist/lib/dashboardMetrics.js.map +1 -0
- package/lib/dist/lib/dataSourceConfig.d.ts +108 -0
- package/lib/dist/lib/dataSourceConfig.d.ts.map +1 -0
- package/lib/dist/lib/dataSourceConfig.js +166 -0
- package/lib/dist/lib/dataSourceConfig.js.map +1 -0
- package/lib/dist/lib/debug.d.ts +26 -0
- package/lib/dist/lib/debug.d.ts.map +1 -0
- package/lib/dist/lib/debug.js +132 -0
- package/lib/dist/lib/debug.js.map +1 -0
- package/lib/dist/lib/diagnostics.d.ts +28 -0
- package/lib/dist/lib/diagnostics.d.ts.map +1 -0
- package/lib/dist/lib/diagnostics.js +65 -0
- package/lib/dist/lib/diagnostics.js.map +1 -0
- package/lib/dist/lib/envCompat.d.ts +27 -0
- package/lib/dist/lib/envCompat.d.ts.map +1 -0
- package/lib/dist/lib/envCompat.js +82 -0
- package/lib/dist/lib/envCompat.js.map +1 -0
- package/lib/dist/lib/evaluationRerun.d.ts +63 -0
- package/lib/dist/lib/evaluationRerun.d.ts.map +1 -0
- package/lib/dist/lib/evaluationRerun.js +85 -0
- package/lib/dist/lib/evaluationRerun.js.map +1 -0
- package/lib/dist/lib/findPackageRoot.d.ts +7 -0
- package/lib/dist/lib/findPackageRoot.d.ts.map +1 -0
- package/lib/dist/lib/findPackageRoot.js +57 -0
- package/lib/dist/lib/findPackageRoot.js.map +1 -0
- package/lib/dist/lib/hooks.d.ts +36 -0
- package/lib/dist/lib/hooks.d.ts.map +1 -0
- package/lib/dist/lib/hooks.js +112 -0
- package/lib/dist/lib/hooks.js.map +1 -0
- package/lib/dist/lib/index.d.ts +47 -0
- package/lib/dist/lib/index.d.ts.map +1 -0
- package/lib/dist/lib/index.js +62 -0
- package/lib/dist/lib/index.js.map +1 -0
- package/lib/dist/lib/labels.d.ts +90 -0
- package/lib/dist/lib/labels.d.ts.map +1 -0
- package/lib/dist/lib/labels.js +158 -0
- package/lib/dist/lib/labels.js.map +1 -0
- package/lib/dist/lib/markdown.d.ts +16 -0
- package/lib/dist/lib/markdown.d.ts.map +1 -0
- package/lib/dist/lib/markdown.js +42 -0
- package/lib/dist/lib/markdown.js.map +1 -0
- package/lib/dist/lib/matchers/expect.d.ts +3 -0
- package/lib/dist/lib/matchers/expect.d.ts.map +1 -0
- package/lib/dist/lib/matchers/expect.js +225 -0
- package/lib/dist/lib/matchers/expect.js.map +1 -0
- package/lib/dist/lib/matchers/index.d.ts +8 -0
- package/lib/dist/lib/matchers/index.d.ts.map +1 -0
- package/lib/dist/lib/matchers/index.js +9 -0
- package/lib/dist/lib/matchers/index.js.map +1 -0
- package/lib/dist/lib/matchers/judgeAccessor.d.ts +113 -0
- package/lib/dist/lib/matchers/judgeAccessor.d.ts.map +1 -0
- package/lib/dist/lib/matchers/judgeAccessor.js +183 -0
- package/lib/dist/lib/matchers/judgeAccessor.js.map +1 -0
- package/lib/dist/lib/matchers/session.d.ts +39 -0
- package/lib/dist/lib/matchers/session.d.ts.map +1 -0
- package/lib/dist/lib/matchers/session.js +116 -0
- package/lib/dist/lib/matchers/session.js.map +1 -0
- package/lib/dist/lib/matchers/traces.d.ts +70 -0
- package/lib/dist/lib/matchers/traces.d.ts.map +1 -0
- package/lib/dist/lib/matchers/traces.js +236 -0
- package/lib/dist/lib/matchers/traces.js.map +1 -0
- package/lib/dist/lib/matchers/tracesPricing.d.ts +38 -0
- package/lib/dist/lib/matchers/tracesPricing.d.ts.map +1 -0
- package/lib/dist/lib/matchers/tracesPricing.js +64 -0
- package/lib/dist/lib/matchers/tracesPricing.js.map +1 -0
- package/lib/dist/lib/matchers/types.d.ts +75 -0
- package/lib/dist/lib/matchers/types.d.ts.map +1 -0
- package/lib/dist/lib/matchers/types.js +6 -0
- package/lib/dist/lib/matchers/types.js.map +1 -0
- package/lib/dist/lib/packagePaths.d.ts +29 -0
- package/lib/dist/lib/packagePaths.d.ts.map +1 -0
- package/lib/dist/lib/packagePaths.js +63 -0
- package/lib/dist/lib/packagePaths.js.map +1 -0
- package/lib/dist/lib/performance.d.ts +51 -0
- package/lib/dist/lib/performance.d.ts.map +1 -0
- package/lib/dist/lib/performance.js +159 -0
- package/lib/dist/lib/performance.js.map +1 -0
- package/lib/dist/lib/portConfig.d.ts +29 -0
- package/lib/dist/lib/portConfig.d.ts.map +1 -0
- package/lib/dist/lib/portConfig.js +64 -0
- package/lib/dist/lib/portConfig.js.map +1 -0
- package/lib/dist/lib/preferences.d.ts +63 -0
- package/lib/dist/lib/preferences.d.ts.map +1 -0
- package/lib/dist/lib/preferences.js +117 -0
- package/lib/dist/lib/preferences.js.map +1 -0
- package/lib/dist/lib/resolveAgentModel.d.ts +22 -0
- package/lib/dist/lib/resolveAgentModel.d.ts.map +1 -0
- package/lib/dist/lib/resolveAgentModel.js +37 -0
- package/lib/dist/lib/resolveAgentModel.js.map +1 -0
- package/lib/dist/lib/runStats.d.ts +116 -0
- package/lib/dist/lib/runStats.d.ts.map +1 -0
- package/lib/dist/lib/runStats.js +192 -0
- package/lib/dist/lib/runStats.js.map +1 -0
- package/lib/dist/lib/telemetry/constants.d.ts +60 -0
- package/lib/dist/lib/telemetry/constants.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/constants.js +87 -0
- package/lib/dist/lib/telemetry/constants.js.map +1 -0
- package/lib/dist/lib/telemetry/evalSpans.d.ts +61 -0
- package/lib/dist/lib/telemetry/evalSpans.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/evalSpans.js +254 -0
- package/lib/dist/lib/telemetry/evalSpans.js.map +1 -0
- package/lib/dist/lib/telemetry/index.d.ts +11 -0
- package/lib/dist/lib/telemetry/index.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/index.js +15 -0
- package/lib/dist/lib/telemetry/index.js.map +1 -0
- package/lib/dist/lib/telemetry/opensearchExporter.d.ts +43 -0
- package/lib/dist/lib/telemetry/opensearchExporter.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/opensearchExporter.js +217 -0
- package/lib/dist/lib/telemetry/opensearchExporter.js.map +1 -0
- package/lib/dist/lib/telemetry/provider.d.ts +55 -0
- package/lib/dist/lib/telemetry/provider.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/provider.js +140 -0
- package/lib/dist/lib/telemetry/provider.js.map +1 -0
- package/lib/dist/lib/testCaseLabels.d.ts +34 -0
- package/lib/dist/lib/testCaseLabels.d.ts.map +1 -0
- package/lib/dist/lib/testCaseLabels.js +88 -0
- package/lib/dist/lib/testCaseLabels.js.map +1 -0
- package/lib/dist/lib/testCaseValidation.d.ts +140 -0
- package/lib/dist/lib/testCaseValidation.d.ts.map +1 -0
- package/lib/dist/lib/testCaseValidation.js +162 -0
- package/lib/dist/lib/testCaseValidation.js.map +1 -0
- package/lib/dist/lib/testCases/agentFixture.d.ts +80 -0
- package/lib/dist/lib/testCases/agentFixture.d.ts.map +1 -0
- package/lib/dist/lib/testCases/agentFixture.js +43 -0
- package/lib/dist/lib/testCases/agentFixture.js.map +1 -0
- package/lib/dist/lib/testCases/authoringSurface.d.ts +10 -0
- package/lib/dist/lib/testCases/authoringSurface.d.ts.map +1 -0
- package/lib/dist/lib/testCases/authoringSurface.js +54 -0
- package/lib/dist/lib/testCases/authoringSurface.js.map +1 -0
- package/lib/dist/lib/testCases/codemod.d.ts +13 -0
- package/lib/dist/lib/testCases/codemod.d.ts.map +1 -0
- package/lib/dist/lib/testCases/codemod.js +169 -0
- package/lib/dist/lib/testCases/codemod.js.map +1 -0
- package/lib/dist/lib/testCases/define.d.ts +114 -0
- package/lib/dist/lib/testCases/define.d.ts.map +1 -0
- package/lib/dist/lib/testCases/define.js +253 -0
- package/lib/dist/lib/testCases/define.js.map +1 -0
- package/lib/dist/lib/testCases/evaluators.d.ts +80 -0
- package/lib/dist/lib/testCases/evaluators.d.ts.map +1 -0
- package/lib/dist/lib/testCases/evaluators.js +105 -0
- package/lib/dist/lib/testCases/evaluators.js.map +1 -0
- package/lib/dist/lib/testCases/index.d.ts +14 -0
- package/lib/dist/lib/testCases/index.d.ts.map +1 -0
- package/lib/dist/lib/testCases/index.js +12 -0
- package/lib/dist/lib/testCases/index.js.map +1 -0
- package/lib/dist/lib/testCases/judge.d.ts +165 -0
- package/lib/dist/lib/testCases/judge.d.ts.map +1 -0
- package/lib/dist/lib/testCases/judge.js +359 -0
- package/lib/dist/lib/testCases/judge.js.map +1 -0
- package/lib/dist/lib/testCases/loader.d.ts +36 -0
- package/lib/dist/lib/testCases/loader.d.ts.map +1 -0
- package/lib/dist/lib/testCases/loader.js +179 -0
- package/lib/dist/lib/testCases/loader.js.map +1 -0
- package/lib/dist/lib/testCases/types.d.ts +242 -0
- package/lib/dist/lib/testCases/types.d.ts.map +1 -0
- package/lib/dist/lib/testCases/types.js +6 -0
- package/lib/dist/lib/testCases/types.js.map +1 -0
- package/lib/dist/lib/theme.d.ts +6 -0
- package/lib/dist/lib/theme.d.ts.map +1 -0
- package/lib/dist/lib/theme.js +36 -0
- package/lib/dist/lib/theme.js.map +1 -0
- package/lib/dist/lib/uiTelemetry.d.ts +7 -0
- package/lib/dist/lib/uiTelemetry.d.ts.map +1 -0
- package/lib/dist/lib/uiTelemetry.js +25 -0
- package/lib/dist/lib/uiTelemetry.js.map +1 -0
- package/lib/dist/lib/utils.d.ts +111 -0
- package/lib/dist/lib/utils.d.ts.map +1 -0
- package/lib/dist/lib/utils.js +254 -0
- package/lib/dist/lib/utils.js.map +1 -0
- package/lib/dist/lib/workflow/consolidate.d.ts +12 -0
- package/lib/dist/lib/workflow/consolidate.d.ts.map +1 -0
- package/lib/dist/lib/workflow/consolidate.js +33 -0
- package/lib/dist/lib/workflow/consolidate.js.map +1 -0
- package/lib/dist/lib/workflow/index.d.ts +13 -0
- package/lib/dist/lib/workflow/index.d.ts.map +1 -0
- package/lib/dist/lib/workflow/index.js +12 -0
- package/lib/dist/lib/workflow/index.js.map +1 -0
- package/lib/dist/lib/workflow/ledger.d.ts +30 -0
- package/lib/dist/lib/workflow/ledger.d.ts.map +1 -0
- package/lib/dist/lib/workflow/ledger.js +41 -0
- package/lib/dist/lib/workflow/ledger.js.map +1 -0
- package/lib/dist/lib/workflow/pool.d.ts +13 -0
- package/lib/dist/lib/workflow/pool.d.ts.map +1 -0
- package/lib/dist/lib/workflow/pool.js +44 -0
- package/lib/dist/lib/workflow/pool.js.map +1 -0
- package/lib/dist/lib/workflow/source.d.ts +22 -0
- package/lib/dist/lib/workflow/source.d.ts.map +1 -0
- package/lib/dist/lib/workflow/source.js +29 -0
- package/lib/dist/lib/workflow/source.js.map +1 -0
- package/lib/dist/lib/workflow/stepB.d.ts +71 -0
- package/lib/dist/lib/workflow/stepB.d.ts.map +1 -0
- package/lib/dist/lib/workflow/stepB.js +99 -0
- package/lib/dist/lib/workflow/stepB.js.map +1 -0
- package/lib/dist/lib/workflow/types.d.ts +86 -0
- package/lib/dist/lib/workflow/types.d.ts.map +1 -0
- package/lib/dist/lib/workflow/types.js +6 -0
- package/lib/dist/lib/workflow/types.js.map +1 -0
- package/lib/dist/lib/workflow/workflow.d.ts +119 -0
- package/lib/dist/lib/workflow/workflow.d.ts.map +1 -0
- package/lib/dist/lib/workflow/workflow.js +195 -0
- package/lib/dist/lib/workflow/workflow.js.map +1 -0
- package/lib/dist/services/agent/aguiConverter.d.ts +50 -0
- package/lib/dist/services/agent/aguiConverter.d.ts.map +1 -0
- package/lib/dist/services/agent/aguiConverter.js +449 -0
- package/lib/dist/services/agent/aguiConverter.js.map +1 -0
- package/lib/dist/services/agent/index.d.ts +10 -0
- package/lib/dist/services/agent/index.d.ts.map +1 -0
- package/lib/dist/services/agent/index.js +12 -0
- package/lib/dist/services/agent/index.js.map +1 -0
- package/lib/dist/services/agent/payloadBuilder.d.ts +33 -0
- package/lib/dist/services/agent/payloadBuilder.d.ts.map +1 -0
- package/lib/dist/services/agent/payloadBuilder.js +75 -0
- package/lib/dist/services/agent/payloadBuilder.js.map +1 -0
- package/lib/dist/services/agent/sseStream.d.ts +43 -0
- package/lib/dist/services/agent/sseStream.d.ts.map +1 -0
- package/lib/dist/services/agent/sseStream.js +223 -0
- package/lib/dist/services/agent/sseStream.js.map +1 -0
- package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts +44 -0
- package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js +95 -0
- package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js.map +1 -0
- package/lib/dist/services/connectors/base/BaseConnector.d.ts +81 -0
- package/lib/dist/services/connectors/base/BaseConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/base/BaseConnector.js +170 -0
- package/lib/dist/services/connectors/base/BaseConnector.js.map +1 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts +126 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js +417 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js.map +1 -0
- package/lib/dist/services/connectors/index.d.ts +13 -0
- package/lib/dist/services/connectors/index.d.ts.map +1 -0
- package/lib/dist/services/connectors/index.js +32 -0
- package/lib/dist/services/connectors/index.js.map +1 -0
- package/lib/dist/services/connectors/kiro/KiroConnector.d.ts +48 -0
- package/lib/dist/services/connectors/kiro/KiroConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/kiro/KiroConnector.js +158 -0
- package/lib/dist/services/connectors/kiro/KiroConnector.js.map +1 -0
- package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts +36 -0
- package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/langgraph/LangGraphConnector.js +175 -0
- package/lib/dist/services/connectors/langgraph/LangGraphConnector.js.map +1 -0
- package/lib/dist/services/connectors/mock/MockConnector.d.ts +37 -0
- package/lib/dist/services/connectors/mock/MockConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/mock/MockConnector.js +120 -0
- package/lib/dist/services/connectors/mock/MockConnector.js.map +1 -0
- package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts +42 -0
- package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js +133 -0
- package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js.map +1 -0
- package/lib/dist/services/connectors/pi/PiConnector.d.ts +87 -0
- package/lib/dist/services/connectors/pi/PiConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/pi/PiConnector.js +274 -0
- package/lib/dist/services/connectors/pi/PiConnector.js.map +1 -0
- package/lib/dist/services/connectors/registry.d.ts +57 -0
- package/lib/dist/services/connectors/registry.d.ts.map +1 -0
- package/lib/dist/services/connectors/registry.js +106 -0
- package/lib/dist/services/connectors/registry.js.map +1 -0
- package/lib/dist/services/connectors/rest/RESTConnector.d.ts +38 -0
- package/lib/dist/services/connectors/rest/RESTConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/rest/RESTConnector.js +117 -0
- package/lib/dist/services/connectors/rest/RESTConnector.js.map +1 -0
- package/lib/dist/services/connectors/server.d.ts +13 -0
- package/lib/dist/services/connectors/server.d.ts.map +1 -0
- package/lib/dist/services/connectors/server.js +34 -0
- package/lib/dist/services/connectors/server.js.map +1 -0
- package/lib/dist/services/connectors/strands/StrandsConnector.d.ts +48 -0
- package/lib/dist/services/connectors/strands/StrandsConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/strands/StrandsConnector.js +221 -0
- package/lib/dist/services/connectors/strands/StrandsConnector.js.map +1 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts +88 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.js +426 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.js.map +1 -0
- package/lib/dist/services/connectors/types.d.ts +213 -0
- package/lib/dist/services/connectors/types.d.ts.map +1 -0
- package/lib/dist/services/connectors/types.js +6 -0
- package/lib/dist/services/connectors/types.js.map +1 -0
- package/lib/dist/services/evaluation/bedrockJudge.d.ts +71 -0
- package/lib/dist/services/evaluation/bedrockJudge.d.ts.map +1 -0
- package/lib/dist/services/evaluation/bedrockJudge.js +169 -0
- package/lib/dist/services/evaluation/bedrockJudge.js.map +1 -0
- package/lib/dist/services/evaluation/evaluatorError.d.ts +56 -0
- package/lib/dist/services/evaluation/evaluatorError.d.ts.map +1 -0
- package/lib/dist/services/evaluation/evaluatorError.js +56 -0
- package/lib/dist/services/evaluation/evaluatorError.js.map +1 -0
- package/lib/dist/services/evaluation/index.d.ts +106 -0
- package/lib/dist/services/evaluation/index.d.ts.map +1 -0
- package/lib/dist/services/evaluation/index.js +684 -0
- package/lib/dist/services/evaluation/index.js.map +1 -0
- package/lib/dist/services/evaluation/mockTrajectory.d.ts +3 -0
- package/lib/dist/services/evaluation/mockTrajectory.d.ts.map +1 -0
- package/lib/dist/services/evaluation/mockTrajectory.js +72 -0
- package/lib/dist/services/evaluation/mockTrajectory.js.map +1 -0
- package/lib/dist/services/opensearch/client.d.ts +26 -0
- package/lib/dist/services/opensearch/client.d.ts.map +1 -0
- package/lib/dist/services/opensearch/client.js +131 -0
- package/lib/dist/services/opensearch/client.js.map +1 -0
- package/lib/dist/services/opensearch/index.d.ts +16 -0
- package/lib/dist/services/opensearch/index.d.ts.map +1 -0
- package/lib/dist/services/opensearch/index.js +25 -0
- package/lib/dist/services/opensearch/index.js.map +1 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts +123 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts.map +1 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.js +440 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.js.map +1 -0
- package/lib/dist/services/storage/asyncRunStorage.d.ts +135 -0
- package/lib/dist/services/storage/asyncRunStorage.d.ts.map +1 -0
- package/lib/dist/services/storage/asyncRunStorage.js +524 -0
- package/lib/dist/services/storage/asyncRunStorage.js.map +1 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.d.ts +170 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.d.ts.map +1 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.js +301 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.js.map +1 -0
- package/lib/dist/services/storage/index.d.ts +17 -0
- package/lib/dist/services/storage/index.d.ts.map +1 -0
- package/lib/dist/services/storage/index.js +20 -0
- package/lib/dist/services/storage/index.js.map +1 -0
- package/lib/dist/services/storage/migration.d.ts +54 -0
- package/lib/dist/services/storage/migration.d.ts.map +1 -0
- package/lib/dist/services/storage/migration.js +296 -0
- package/lib/dist/services/storage/migration.js.map +1 -0
- package/lib/dist/services/storage/opensearchClient.d.ts +947 -0
- package/lib/dist/services/storage/opensearchClient.d.ts.map +1 -0
- package/lib/dist/services/storage/opensearchClient.js +442 -0
- package/lib/dist/services/storage/opensearchClient.js.map +1 -0
- package/lib/dist/services/traces/browserRecovery.d.ts +37 -0
- package/lib/dist/services/traces/browserRecovery.d.ts.map +1 -0
- package/lib/dist/services/traces/browserRecovery.js +108 -0
- package/lib/dist/services/traces/browserRecovery.js.map +1 -0
- package/lib/dist/services/traces/categoryStyles.d.ts +21 -0
- package/lib/dist/services/traces/categoryStyles.d.ts.map +1 -0
- package/lib/dist/services/traces/categoryStyles.js +56 -0
- package/lib/dist/services/traces/categoryStyles.js.map +1 -0
- package/lib/dist/services/traces/executionOrderTransform.d.ts +35 -0
- package/lib/dist/services/traces/executionOrderTransform.d.ts.map +1 -0
- package/lib/dist/services/traces/executionOrderTransform.js +313 -0
- package/lib/dist/services/traces/executionOrderTransform.js.map +1 -0
- package/lib/dist/services/traces/fetchSpansForRun.d.ts +86 -0
- package/lib/dist/services/traces/fetchSpansForRun.d.ts.map +1 -0
- package/lib/dist/services/traces/fetchSpansForRun.js +69 -0
- package/lib/dist/services/traces/fetchSpansForRun.js.map +1 -0
- package/lib/dist/services/traces/flowTransform.d.ts +24 -0
- package/lib/dist/services/traces/flowTransform.d.ts.map +1 -0
- package/lib/dist/services/traces/flowTransform.js +228 -0
- package/lib/dist/services/traces/flowTransform.js.map +1 -0
- package/lib/dist/services/traces/index.d.ts +121 -0
- package/lib/dist/services/traces/index.d.ts.map +1 -0
- package/lib/dist/services/traces/index.js +255 -0
- package/lib/dist/services/traces/index.js.map +1 -0
- package/lib/dist/services/traces/intentTransform.d.ts +20 -0
- package/lib/dist/services/traces/intentTransform.d.ts.map +1 -0
- package/lib/dist/services/traces/intentTransform.js +131 -0
- package/lib/dist/services/traces/intentTransform.js.map +1 -0
- package/lib/dist/services/traces/judgeAgentsHints.d.ts +63 -0
- package/lib/dist/services/traces/judgeAgentsHints.d.ts.map +1 -0
- package/lib/dist/services/traces/judgeAgentsHints.js +89 -0
- package/lib/dist/services/traces/judgeAgentsHints.js.map +1 -0
- package/lib/dist/services/traces/messageExtraction.d.ts +15 -0
- package/lib/dist/services/traces/messageExtraction.d.ts.map +1 -0
- package/lib/dist/services/traces/messageExtraction.js +313 -0
- package/lib/dist/services/traces/messageExtraction.js.map +1 -0
- package/lib/dist/services/traces/spanCategorization.d.ts +63 -0
- package/lib/dist/services/traces/spanCategorization.d.ts.map +1 -0
- package/lib/dist/services/traces/spanCategorization.js +276 -0
- package/lib/dist/services/traces/spanCategorization.js.map +1 -0
- package/lib/dist/services/traces/spanPreprocessing.d.ts +37 -0
- package/lib/dist/services/traces/spanPreprocessing.d.ts.map +1 -0
- package/lib/dist/services/traces/spanPreprocessing.js +102 -0
- package/lib/dist/services/traces/spanPreprocessing.js.map +1 -0
- package/lib/dist/services/traces/spansToTrajectory.d.ts +36 -0
- package/lib/dist/services/traces/spansToTrajectory.d.ts.map +1 -0
- package/lib/dist/services/traces/spansToTrajectory.js +425 -0
- package/lib/dist/services/traces/spansToTrajectory.js.map +1 -0
- package/lib/dist/services/traces/toolSimilarity.d.ts +35 -0
- package/lib/dist/services/traces/toolSimilarity.d.ts.map +1 -0
- package/lib/dist/services/traces/toolSimilarity.js +203 -0
- package/lib/dist/services/traces/toolSimilarity.js.map +1 -0
- package/lib/dist/services/traces/traceComparison.d.ts +31 -0
- package/lib/dist/services/traces/traceComparison.d.ts.map +1 -0
- package/lib/dist/services/traces/traceComparison.js +318 -0
- package/lib/dist/services/traces/traceComparison.js.map +1 -0
- package/lib/dist/services/traces/traceGrouping.d.ts +19 -0
- package/lib/dist/services/traces/traceGrouping.d.ts.map +1 -0
- package/lib/dist/services/traces/traceGrouping.js +107 -0
- package/lib/dist/services/traces/traceGrouping.js.map +1 -0
- package/lib/dist/services/traces/tracePoller.d.ts +108 -0
- package/lib/dist/services/traces/tracePoller.d.ts.map +1 -0
- package/lib/dist/services/traces/tracePoller.js +475 -0
- package/lib/dist/services/traces/tracePoller.js.map +1 -0
- package/lib/dist/services/traces/traceStats.d.ts +45 -0
- package/lib/dist/services/traces/traceStats.d.ts.map +1 -0
- package/lib/dist/services/traces/traceStats.js +114 -0
- package/lib/dist/services/traces/traceStats.js.map +1 -0
- package/lib/dist/services/traces/traceSummary.d.ts +47 -0
- package/lib/dist/services/traces/traceSummary.d.ts.map +1 -0
- package/lib/dist/services/traces/traceSummary.js +68 -0
- package/lib/dist/services/traces/traceSummary.js.map +1 -0
- package/lib/dist/services/traces/utils.d.ts +33 -0
- package/lib/dist/services/traces/utils.d.ts.map +1 -0
- package/lib/dist/services/traces/utils.js +114 -0
- package/lib/dist/services/traces/utils.js.map +1 -0
- package/lib/dist/types/agui.d.ts +13 -0
- package/lib/dist/types/agui.d.ts.map +1 -0
- package/lib/dist/types/agui.js +16 -0
- package/lib/dist/types/agui.js.map +1 -0
- package/lib/dist/types/index.d.ts +1229 -0
- package/lib/dist/types/index.d.ts.map +1 -0
- package/lib/dist/types/index.js +12 -0
- package/lib/dist/types/index.js.map +1 -0
- package/lib/dist/types/skills.d.ts +146 -0
- package/lib/dist/types/skills.d.ts.map +1 -0
- package/lib/dist/types/skills.js +6 -0
- package/lib/dist/types/skills.js.map +1 -0
- package/observio-sample-agent/pi-package/README.md +112 -0
- package/observio-sample-agent/pi-package/extensions/agent-health.ts +373 -0
- package/observio-sample-agent/pi-package/package.json +17 -0
- package/observio-sample-agent/pi-package/prompts/agent-health.md +37 -0
- package/observio-sample-agent/pi-package/skills/create-pr/SKILL.md +88 -0
- package/observio-sample-agent/pi-package/skills/fix-bug/SKILL.md +71 -0
- package/observio-sample-agent/pi-package/skills/implement-feature/SKILL.md +156 -0
- package/observio-sample-agent/pi-package/skills/instrument-otel/SKILL.md +208 -0
- package/observio-sample-agent/pi-package/skills/setup-collector/SKILL.md +146 -0
- package/observio-sample-agent/pi-package/skills/write-test/SKILL.md +115 -0
- package/package.json +45 -9
- package/server/dist/app.js +34031 -18731
- package/server/dist/index.js +30737 -15338
- package/tsconfig.lib.json +71 -0
- package/dist/assets/index-BOIP5L7h.js +0 -246
- package/dist/assets/index-CU9YKpAL.css +0 -1
- package/lib/dist/config/index.js +0 -452
- package/lib/dist/index.js +0 -1725
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `judge()` — LLM-judge matcher, callable from inside a test body.
|
|
3
|
+
*
|
|
4
|
+
* Two ergonomic forms:
|
|
5
|
+
*
|
|
6
|
+
* await judge(result, 'identifies the failing dependency'); // single claim
|
|
7
|
+
* await judge(result.trajectory, ['claim 1', 'claim 2']); // legacy form
|
|
8
|
+
*
|
|
9
|
+
* Per-call options:
|
|
10
|
+
*
|
|
11
|
+
* await judge(result, claim, { evaluatorId: 'system-rca-default' });
|
|
12
|
+
* await judge(result, claim, { model: 'claude-sonnet' });
|
|
13
|
+
*
|
|
14
|
+
* On evaluation, `judge()` records a MatcherResult and returns a
|
|
15
|
+
* {@link Verdict} **without throwing** (RFC 004 §4.8). A failing
|
|
16
|
+
* `gate`-role verdict still fails the test (the runner inspects the
|
|
17
|
+
* recorded results), but the body keeps running so every signal is
|
|
18
|
+
* collected. To hard-stop the body on a bad verdict, call
|
|
19
|
+
* `(await judge(...)).orThrow()` or assert `expect(verdict).toPass()`.
|
|
20
|
+
*
|
|
21
|
+
* Two roles:
|
|
22
|
+
* - `judge(result, claim)` — gate: a failing verdict fails the test.
|
|
23
|
+
* - `judge.observe(result, claim)` — observe: feeds score + insights only,
|
|
24
|
+
* never fails the test.
|
|
25
|
+
*
|
|
26
|
+
* Calls the Agent Health server's /api/judge endpoint with the same
|
|
27
|
+
* payload shape (`{ trajectory, expectedOutcomes, modelId, evaluatorId }`)
|
|
28
|
+
* the UI "Run Test" path uses, so SDK and UI runs are scored by the same
|
|
29
|
+
* judge prompt and provider routing.
|
|
30
|
+
*
|
|
31
|
+
* Run-level evaluator default: the runner injects a bound version of
|
|
32
|
+
* `judge` into `TestFixtures` via `bindJudge(run.evaluatorId)`. Code
|
|
33
|
+
* that destructures `judge` from the fixture (`async ({ judge }) => ...`)
|
|
34
|
+
* automatically picks up the run's evaluator with no per-call argument.
|
|
35
|
+
* Code that imports `judge` from the package gets the unbound version
|
|
36
|
+
* and must pass `evaluatorId` explicitly.
|
|
37
|
+
*/
|
|
38
|
+
import type { TrajectoryStep } from '../../types/index.js';
|
|
39
|
+
/** Whether a judge signal gates the test verdict or is observational only. */
|
|
40
|
+
export type JudgeRole = 'gate' | 'observe';
|
|
41
|
+
/** Test-only: reset the warn-once latch so unit tests can assert it fires. */
|
|
42
|
+
export declare function __resetJudgePortWarning(): void;
|
|
43
|
+
/**
|
|
44
|
+
* The result of a `judge()` call. Carries the verdict data plus a few
|
|
45
|
+
* convenience flags and an explicit hard-stop escape hatch. Returned
|
|
46
|
+
* (never thrown) so the body can collect multiple verdicts; the recorded
|
|
47
|
+
* MatcherResult is what actually gates the test.
|
|
48
|
+
*
|
|
49
|
+
* Backward-compatible with the old `JudgeVerdict` (same
|
|
50
|
+
* `passFailStatus`/`accuracy`/`reasoning` fields).
|
|
51
|
+
*/
|
|
52
|
+
export interface Verdict {
|
|
53
|
+
passFailStatus: 'passed' | 'failed';
|
|
54
|
+
/** Headline accuracy on the [0, 100] interval. */
|
|
55
|
+
accuracy: number;
|
|
56
|
+
/** Normalised score on the [0, 1] interval (`accuracy / 100`). */
|
|
57
|
+
score: number;
|
|
58
|
+
/** Free-form judge reasoning. */
|
|
59
|
+
reasoning: string;
|
|
60
|
+
/** Convenience: `passFailStatus === 'passed'`. */
|
|
61
|
+
pass: boolean;
|
|
62
|
+
/** Role this verdict was produced with (`gate` or `observe`). */
|
|
63
|
+
role: JudgeRole;
|
|
64
|
+
/** True when the judge was skipped (no LLM call was made). */
|
|
65
|
+
skipped: boolean;
|
|
66
|
+
/** True when the judge could not run at all (endpoint error). */
|
|
67
|
+
errored: boolean;
|
|
68
|
+
/** Underlying error message when `errored` is true. */
|
|
69
|
+
errorMessage?: string;
|
|
70
|
+
/**
|
|
71
|
+
* Hard-stop: throw if the verdict did not pass. A no-op for passing,
|
|
72
|
+
* skipped verdicts. Returns the verdict so it can be chained:
|
|
73
|
+
* const v = (await judge(result, claim)).orThrow();
|
|
74
|
+
*/
|
|
75
|
+
orThrow(): Verdict;
|
|
76
|
+
}
|
|
77
|
+
/** @deprecated Use {@link Verdict}. Retained as a structural alias. */
|
|
78
|
+
export type JudgeVerdict = Verdict;
|
|
79
|
+
/**
|
|
80
|
+
* Per-call options for the SDK `judge()` matcher. Mirrors the relevant
|
|
81
|
+
* fields of the `/api/judge` request body so SDK runs and UI runs use
|
|
82
|
+
* the same judge prompt + evaluator + provider routing.
|
|
83
|
+
*/
|
|
84
|
+
export interface JudgeOptions {
|
|
85
|
+
/**
|
|
86
|
+
* Override the agent-health server URL. Defaults to
|
|
87
|
+
* `http://localhost:${AGENT_HEALTH_PORT ?? 4001}`.
|
|
88
|
+
*/
|
|
89
|
+
serverUrl?: string;
|
|
90
|
+
/**
|
|
91
|
+
* Override the judge model. Forwarded as `modelId` on the request body;
|
|
92
|
+
* the server resolves it through `config.models[modelId]` exactly as it
|
|
93
|
+
* does for UI runs.
|
|
94
|
+
*/
|
|
95
|
+
model?: string;
|
|
96
|
+
/**
|
|
97
|
+
* Stored evaluator id (system or user). Forwarded as `evaluatorId` on
|
|
98
|
+
* the request body. The server resolves system evaluators via
|
|
99
|
+
* `getSystemEvaluatorById(...)` and user evaluators via
|
|
100
|
+
* `storage.evaluators.getById(...)` — identical to the UI path. Falls
|
|
101
|
+
* back to the default evaluator when omitted on both call and bind.
|
|
102
|
+
*/
|
|
103
|
+
evaluatorId?: string;
|
|
104
|
+
/**
|
|
105
|
+
* Skip the LLM call entirely. The judge returns a non-gating `skipped`
|
|
106
|
+
* verdict (pass: true, skipped: true). Useful for fast/offline iteration.
|
|
107
|
+
* The global `AH_SKIP_JUDGE=1` env var forces this for every judge call.
|
|
108
|
+
*/
|
|
109
|
+
skip?: boolean;
|
|
110
|
+
}
|
|
111
|
+
/** Clear the in-process judge verdict cache (test isolation / new run). */
|
|
112
|
+
export declare function clearJudgeCache(): void;
|
|
113
|
+
export declare function wasJudgeCalled(): boolean;
|
|
114
|
+
export declare function resetJudgeFlag(): void;
|
|
115
|
+
interface ResultLike {
|
|
116
|
+
trajectory?: TrajectoryStep[];
|
|
117
|
+
finalResponse?: () => string;
|
|
118
|
+
agentOutput?: string;
|
|
119
|
+
runId?: string;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* The callable `judge` surface: a function (gate role) with an `.observe`
|
|
123
|
+
* method (observe role).
|
|
124
|
+
*/
|
|
125
|
+
export interface JudgeFn {
|
|
126
|
+
(resultOrTrajectory: ResultLike | TrajectoryStep[], claimOrClaims: string | string[], options?: JudgeOptions): Promise<Verdict>;
|
|
127
|
+
/**
|
|
128
|
+
* Observational judge: records the verdict for score + insights but does
|
|
129
|
+
* NOT gate the test (a failing observe verdict never fails the run).
|
|
130
|
+
*/
|
|
131
|
+
observe(resultOrTrajectory: ResultLike | TrajectoryStep[], claimOrClaims: string | string[], options?: JudgeOptions): Promise<Verdict>;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Single-claim ergonomic form (gate role).
|
|
135
|
+
* @example
|
|
136
|
+
* const v = await judge(result, 'identifies the failing dependency');
|
|
137
|
+
* if (!v.pass) { ... } // non-throwing
|
|
138
|
+
* (await judge(result, claim)).orThrow(); // explicit hard-stop
|
|
139
|
+
* await judge.observe(result, claim); // score-only, never gates
|
|
140
|
+
*/
|
|
141
|
+
export declare const judge: JudgeFn;
|
|
142
|
+
/**
|
|
143
|
+
* Bind run-level defaults to `judge` and return a callable with the same
|
|
144
|
+
* signature. Used by the SDK runner to inject `run.evaluatorId` (and
|
|
145
|
+
* optionally a default judge model) into the `TestFixtures.judge` slot,
|
|
146
|
+
* so test bodies that destructure `({ judge })` automatically inherit
|
|
147
|
+
* the run's evaluator selection — matching the UI's behaviour where the
|
|
148
|
+
* evaluator picked on the run config applies to every judged test case.
|
|
149
|
+
*
|
|
150
|
+
* Per-call options always win over the bound defaults; pass an empty
|
|
151
|
+
* object (or omit the field) to fall through to the bound value.
|
|
152
|
+
*
|
|
153
|
+
* const boundJudge = bindJudge({ evaluatorId: run.evaluatorId });
|
|
154
|
+
* await boundJudge(result, claim); // uses run.evaluatorId
|
|
155
|
+
* await boundJudge(result, claim, { evaluatorId: 'other' }); // overrides
|
|
156
|
+
* await boundJudge(result, claim, { evaluatorId: undefined }); // still uses bound default
|
|
157
|
+
*/
|
|
158
|
+
export declare function bindJudge(defaults?: {
|
|
159
|
+
evaluatorId?: string;
|
|
160
|
+
model?: string;
|
|
161
|
+
serverUrl?: string;
|
|
162
|
+
skip?: boolean;
|
|
163
|
+
}): JudgeFn;
|
|
164
|
+
export {};
|
|
165
|
+
//# sourceMappingURL=judge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../../../testCases/judge.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAK9C,8EAA8E;AAC9E,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAuB3C,8EAA8E;AAC9E,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,OAAO;IACtB,cAAc,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACpC,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,IAAI,EAAE,OAAO,CAAC;IACd,iEAAiE;IACjE,IAAI,EAAE,SAAS,CAAC;IAChB,8DAA8D;IAC9D,OAAO,EAAE,OAAO,CAAC;IACjB,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAAC;CACpB;AAED,uEAAuE;AACvE,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC;AAEnC;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAeD,2EAA2E;AAC3E,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AA0CD,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,UAAU,UAAU;IAClB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA8BD;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,CACE,kBAAkB,EAAE,UAAU,GAAG,cAAc,EAAE,EACjD,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,EAChC,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB;;;OAGG;IACH,OAAO,CACL,kBAAkB,EAAE,UAAU,GAAG,cAAc,EAAE,EACjD,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,EAChC,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB;AAyND;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,EAAE,OAanB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,QAAQ,CAAC,EAAE;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CA+BV"}
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { recordVerdict } from '../matchers/session.js';
|
|
6
|
+
import { readEnv } from '../envCompat.js';
|
|
7
|
+
import { getBackendUrl, isBackendPortExplicit, DEFAULT_BACKEND_PORT } from '../portConfig.js';
|
|
8
|
+
// Warn at most once per process when judge() falls back to the default
|
|
9
|
+
// backend port. Defaulting to 4001 is dangerous when a *foreign* agent-health
|
|
10
|
+
// server (a live demo, another checkout) is listening there — the judge call
|
|
11
|
+
// would hit it instead of the run's own server. We warn rather than throw so
|
|
12
|
+
// existing zero-config local usage (server actually on 4001) keeps working.
|
|
13
|
+
let warnedDefaultJudgePort = false;
|
|
14
|
+
function resolveJudgeServerUrl(explicit) {
|
|
15
|
+
if (explicit)
|
|
16
|
+
return explicit;
|
|
17
|
+
if (!isBackendPortExplicit() && !warnedDefaultJudgePort) {
|
|
18
|
+
warnedDefaultJudgePort = true;
|
|
19
|
+
// eslint-disable-next-line no-console
|
|
20
|
+
console.warn(`[agent-health] judge(): AH_PORT is not set and no options.serverUrl was ` +
|
|
21
|
+
`provided — defaulting to http://localhost:${DEFAULT_BACKEND_PORT}. If a ` +
|
|
22
|
+
`different agent-health server is on that port, judging will hit it. Set ` +
|
|
23
|
+
`AH_PORT or pass options.serverUrl to target the right server.`);
|
|
24
|
+
}
|
|
25
|
+
return getBackendUrl();
|
|
26
|
+
}
|
|
27
|
+
/** Test-only: reset the warn-once latch so unit tests can assert it fires. */
|
|
28
|
+
export function __resetJudgePortWarning() {
|
|
29
|
+
warnedDefaultJudgePort = false;
|
|
30
|
+
}
|
|
31
|
+
const verdictCache = new Map();
|
|
32
|
+
/** Clear the in-process judge verdict cache (test isolation / new run). */
|
|
33
|
+
export function clearJudgeCache() {
|
|
34
|
+
verdictCache.clear();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Stable, collision-resistant cache key over the judging inputs. Uses
|
|
38
|
+
* `sha256` when Node's crypto is available, falling back to a fast JS hash
|
|
39
|
+
* so the SDK stays bundler-safe.
|
|
40
|
+
*/
|
|
41
|
+
function judgeCacheKey(input) {
|
|
42
|
+
const canonical = JSON.stringify({
|
|
43
|
+
evaluatorId: input.evaluatorId ?? '',
|
|
44
|
+
model: input.model ?? '',
|
|
45
|
+
claims: input.claims,
|
|
46
|
+
trajectory: input.trajectory,
|
|
47
|
+
});
|
|
48
|
+
try {
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
50
|
+
const { createHash } = require('crypto');
|
|
51
|
+
return createHash('sha256').update(canonical).digest('hex');
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// FNV-1a fallback — non-cryptographic but fine for cache addressing.
|
|
55
|
+
let h = 0x811c9dc5;
|
|
56
|
+
for (let i = 0; i < canonical.length; i++) {
|
|
57
|
+
h ^= canonical.charCodeAt(i);
|
|
58
|
+
h = Math.imul(h, 0x01000193);
|
|
59
|
+
}
|
|
60
|
+
return (h >>> 0).toString(16);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** Whether judging is globally skipped via env (CLI `--no-judge`). */
|
|
64
|
+
function judgeSkippedByEnv() {
|
|
65
|
+
const v = readEnv('AH_SKIP_JUDGE', 'AGENT_HEALTH_SKIP_JUDGE');
|
|
66
|
+
return v === '1' || v === 'true' || v === 'yes';
|
|
67
|
+
}
|
|
68
|
+
let judgeCalledInCurrentEval = false;
|
|
69
|
+
export function wasJudgeCalled() {
|
|
70
|
+
return judgeCalledInCurrentEval;
|
|
71
|
+
}
|
|
72
|
+
export function resetJudgeFlag() {
|
|
73
|
+
judgeCalledInCurrentEval = false;
|
|
74
|
+
}
|
|
75
|
+
function isTrajectory(x) {
|
|
76
|
+
return Array.isArray(x);
|
|
77
|
+
}
|
|
78
|
+
function isResultLike(x) {
|
|
79
|
+
return typeof x === 'object' && x !== null && 'trajectory' in x;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Build a {@link Verdict} object with the `orThrow()` escape hatch attached.
|
|
83
|
+
*/
|
|
84
|
+
function makeVerdict(v) {
|
|
85
|
+
const verdict = {
|
|
86
|
+
...v,
|
|
87
|
+
pass: v.passFailStatus === 'passed',
|
|
88
|
+
score: v.score ?? (typeof v.accuracy === 'number' ? v.accuracy / 100 : 0),
|
|
89
|
+
orThrow() {
|
|
90
|
+
// Passing or skipped verdicts never throw. Failed/errored ones do.
|
|
91
|
+
if (this.pass || this.skipped)
|
|
92
|
+
return this;
|
|
93
|
+
const label = this.errored ? 'errored' : 'FAILED';
|
|
94
|
+
throw new Error(`LLM Judge: ${label} (accuracy: ${this.accuracy})\n${this.errorMessage ?? this.reasoning}`);
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
return verdict;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Core judge implementation. Records exactly one MatcherResult (carrying
|
|
101
|
+
* `role`) and returns a non-throwing {@link Verdict}.
|
|
102
|
+
*/
|
|
103
|
+
async function runJudge(resultOrTrajectory, claimOrClaims, options, role) {
|
|
104
|
+
judgeCalledInCurrentEval = true;
|
|
105
|
+
const trajectory = isTrajectory(resultOrTrajectory)
|
|
106
|
+
? resultOrTrajectory
|
|
107
|
+
: (isResultLike(resultOrTrajectory) ? resultOrTrajectory.trajectory ?? [] : []);
|
|
108
|
+
// Agent run id for trace/log correlation — lets the agentic trace judge
|
|
109
|
+
// scope its read-only tools to this single run. Only present when the
|
|
110
|
+
// caller passed a RunResult (not a bare trajectory array).
|
|
111
|
+
const runId = !isTrajectory(resultOrTrajectory) && isResultLike(resultOrTrajectory)
|
|
112
|
+
? resultOrTrajectory.runId
|
|
113
|
+
: undefined;
|
|
114
|
+
// Strategy-C trace-correlation hints the runner attached to the result
|
|
115
|
+
// (service-name + window). Forwarding them as `agents` lets the agent
|
|
116
|
+
// (trace) judge find this run's spans in OpenSearch the same way the
|
|
117
|
+
// classic `waitForTracesAndJudge` path does (#264) — without them the SDK
|
|
118
|
+
// judge sends only `runId` and misses subprocess agents' spans. This is
|
|
119
|
+
// the SDK↔UI convergence fix.
|
|
120
|
+
const judgeAgents = !isTrajectory(resultOrTrajectory) && isResultLike(resultOrTrajectory)
|
|
121
|
+
? resultOrTrajectory.judgeAgents
|
|
122
|
+
: undefined;
|
|
123
|
+
const claims = Array.isArray(claimOrClaims) ? claimOrClaims : [claimOrClaims];
|
|
124
|
+
const serverUrl = resolveJudgeServerUrl(options?.serverUrl);
|
|
125
|
+
const description = claims.length === 1 ? `judge: ${claims[0]}` : `judge: ${claims.length} claims`;
|
|
126
|
+
// Body shape matches the UI's /api/judge POST exactly: trajectory,
|
|
127
|
+
// expectedOutcomes, expectedTrajectory, optional modelId, optional
|
|
128
|
+
// evaluatorId. The server applies the same evaluator-resolution and
|
|
129
|
+
// provider-routing logic regardless of caller, so SDK and UI runs
|
|
130
|
+
// produce comparable verdicts.
|
|
131
|
+
const requestBody = {
|
|
132
|
+
trajectory,
|
|
133
|
+
expectedOutcomes: claims,
|
|
134
|
+
expectedTrajectory: [],
|
|
135
|
+
};
|
|
136
|
+
if (options?.model)
|
|
137
|
+
requestBody.modelId = options.model;
|
|
138
|
+
if (options?.evaluatorId)
|
|
139
|
+
requestBody.evaluatorId = options.evaluatorId;
|
|
140
|
+
if (runId)
|
|
141
|
+
requestBody.runId = runId;
|
|
142
|
+
if (Array.isArray(judgeAgents) && judgeAgents.length > 0)
|
|
143
|
+
requestBody.agents = judgeAgents;
|
|
144
|
+
// Record the success path identically whether the verdict came fresh from
|
|
145
|
+
// the endpoint or from the in-process cache.
|
|
146
|
+
const finalize = (raw, durationMs) => {
|
|
147
|
+
const accuracy = raw.metrics?.accuracy ?? 0;
|
|
148
|
+
const verdict = makeVerdict({
|
|
149
|
+
passFailStatus: raw.passFailStatus ?? 'failed',
|
|
150
|
+
accuracy,
|
|
151
|
+
reasoning: raw.llmJudgeReasoning ?? '',
|
|
152
|
+
role,
|
|
153
|
+
skipped: false,
|
|
154
|
+
errored: false,
|
|
155
|
+
});
|
|
156
|
+
recordVerdict({
|
|
157
|
+
description,
|
|
158
|
+
pass: verdict.pass,
|
|
159
|
+
method: 'llm-judge',
|
|
160
|
+
role,
|
|
161
|
+
durationMs,
|
|
162
|
+
score: verdict.score,
|
|
163
|
+
reasoning: verdict.reasoning,
|
|
164
|
+
model: options?.model,
|
|
165
|
+
errorMessage: verdict.passFailStatus === 'failed' ? verdict.reasoning : undefined,
|
|
166
|
+
// Preserve the rest of the judge payload — these were silently
|
|
167
|
+
// dropped before, which made SDK `judge()` calls strictly less
|
|
168
|
+
// informative than the legacy auto-judge path. See MatcherResult.
|
|
169
|
+
...(Array.isArray(raw.improvementStrategies) && raw.improvementStrategies.length > 0
|
|
170
|
+
? { improvementStrategies: raw.improvementStrategies }
|
|
171
|
+
: {}),
|
|
172
|
+
...(raw.metrics && typeof raw.metrics === 'object'
|
|
173
|
+
? { judgeMetrics: { ...raw.metrics } }
|
|
174
|
+
: {}),
|
|
175
|
+
});
|
|
176
|
+
return verdict;
|
|
177
|
+
};
|
|
178
|
+
// SKIP: no LLM call. `skip` is tri-state and takes precedence over the env:
|
|
179
|
+
// skip === true → always skip
|
|
180
|
+
// skip === false → never skip (force the judge to run, even if AH_SKIP_JUDGE is set)
|
|
181
|
+
// skip undefined → defer to AH_SKIP_JUDGE
|
|
182
|
+
// This makes a per-call/bound `skip: false` a meaningful override rather than
|
|
183
|
+
// having the env unconditionally win.
|
|
184
|
+
const shouldSkip = options?.skip === true || (options?.skip !== false && judgeSkippedByEnv());
|
|
185
|
+
if (shouldSkip) {
|
|
186
|
+
recordVerdict({
|
|
187
|
+
description: `${description} (skipped)`,
|
|
188
|
+
pass: true,
|
|
189
|
+
method: 'llm-judge',
|
|
190
|
+
role: 'observe',
|
|
191
|
+
durationMs: 0,
|
|
192
|
+
reasoning: 'Judge skipped (AH_SKIP_JUDGE / skip option).',
|
|
193
|
+
});
|
|
194
|
+
return makeVerdict({
|
|
195
|
+
passFailStatus: 'passed',
|
|
196
|
+
accuracy: 0,
|
|
197
|
+
reasoning: 'Judge skipped.',
|
|
198
|
+
role,
|
|
199
|
+
skipped: true,
|
|
200
|
+
errored: false,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
// CACHE: identical (evaluator, model, claims, trajectory) → reuse verdict.
|
|
204
|
+
const cacheKey = judgeCacheKey({
|
|
205
|
+
evaluatorId: options?.evaluatorId,
|
|
206
|
+
model: options?.model,
|
|
207
|
+
claims,
|
|
208
|
+
trajectory,
|
|
209
|
+
});
|
|
210
|
+
const cached = verdictCache.get(cacheKey);
|
|
211
|
+
if (cached) {
|
|
212
|
+
return finalize(cached, 0);
|
|
213
|
+
}
|
|
214
|
+
const startedAt = Date.now();
|
|
215
|
+
// Resilience: the agentic (trace) judge can be slow and, under load (in-process
|
|
216
|
+
// pi sessions + query_spans/query_logs round-trips on the same server), the
|
|
217
|
+
// loopback fetch to /api/judge can transiently throw "fetch failed" (undici
|
|
218
|
+
// keep-alive socket reset / ~300s headersTimeout) or return a 5xx/429. Without
|
|
219
|
+
// a retry, ONE such transient blip records an `errored` matcher — which makes
|
|
220
|
+
// the runner clear `passFailStatus` to null and bucket the whole run as
|
|
221
|
+
// "errored" (#247) even when every other gate passed. Retry transient failures
|
|
222
|
+
// with exponential backoff before giving up. Deterministic 4xx (not 429) are
|
|
223
|
+
// not retried.
|
|
224
|
+
const MAX_JUDGE_ATTEMPTS = 3;
|
|
225
|
+
let response;
|
|
226
|
+
let lastErrMsg = '';
|
|
227
|
+
for (let attempt = 1; attempt <= MAX_JUDGE_ATTEMPTS; attempt++) {
|
|
228
|
+
try {
|
|
229
|
+
const r = await fetch(`${serverUrl}/api/judge`, {
|
|
230
|
+
method: 'POST',
|
|
231
|
+
headers: { 'Content-Type': 'application/json' },
|
|
232
|
+
body: JSON.stringify(requestBody),
|
|
233
|
+
});
|
|
234
|
+
if (r.ok) {
|
|
235
|
+
response = r;
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
lastErrMsg = `Judge HTTP ${r.status}: ${await r.text()}`;
|
|
239
|
+
// 4xx (except 429) are deterministic — retrying won't help; surface as errored.
|
|
240
|
+
if (r.status < 500 && r.status !== 429) {
|
|
241
|
+
response = r;
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
catch (err) {
|
|
246
|
+
lastErrMsg = err?.message || String(err); // e.g. "fetch failed"
|
|
247
|
+
}
|
|
248
|
+
if (attempt < MAX_JUDGE_ATTEMPTS) {
|
|
249
|
+
// Exponential backoff (1s, 2s). Overridable via AH_JUDGE_RETRY_BACKOFF_MS
|
|
250
|
+
// (set to 0 in tests to avoid real delays); 0 disables the wait.
|
|
251
|
+
const baseMs = process.env.AH_JUDGE_RETRY_BACKOFF_MS !== undefined
|
|
252
|
+
? Number(process.env.AH_JUDGE_RETRY_BACKOFF_MS)
|
|
253
|
+
: 1000;
|
|
254
|
+
if (baseMs > 0)
|
|
255
|
+
await new Promise((res) => setTimeout(res, baseMs * 2 ** (attempt - 1)));
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
if (!response) {
|
|
259
|
+
// Every attempt failed transiently — the judge could not run. `errored`,
|
|
260
|
+
// not a clean `pass: false`.
|
|
261
|
+
recordVerdict({
|
|
262
|
+
description,
|
|
263
|
+
pass: false,
|
|
264
|
+
method: 'llm-judge',
|
|
265
|
+
role,
|
|
266
|
+
errored: true,
|
|
267
|
+
durationMs: Date.now() - startedAt,
|
|
268
|
+
errorMessage: `Judge request failed after ${MAX_JUDGE_ATTEMPTS} attempts: ${lastErrMsg}`,
|
|
269
|
+
reasoning: '',
|
|
270
|
+
});
|
|
271
|
+
return makeVerdict({
|
|
272
|
+
passFailStatus: 'failed',
|
|
273
|
+
accuracy: 0,
|
|
274
|
+
reasoning: '',
|
|
275
|
+
role,
|
|
276
|
+
skipped: false,
|
|
277
|
+
errored: true,
|
|
278
|
+
errorMessage: `Judge request failed after ${MAX_JUDGE_ATTEMPTS} attempts: ${lastErrMsg}`,
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
if (!response.ok) {
|
|
282
|
+
recordVerdict({
|
|
283
|
+
description,
|
|
284
|
+
pass: false,
|
|
285
|
+
method: 'llm-judge',
|
|
286
|
+
role,
|
|
287
|
+
errored: true,
|
|
288
|
+
durationMs: Date.now() - startedAt,
|
|
289
|
+
errorMessage: lastErrMsg,
|
|
290
|
+
reasoning: '',
|
|
291
|
+
});
|
|
292
|
+
return makeVerdict({
|
|
293
|
+
passFailStatus: 'failed',
|
|
294
|
+
accuracy: 0,
|
|
295
|
+
reasoning: '',
|
|
296
|
+
role,
|
|
297
|
+
skipped: false,
|
|
298
|
+
errored: true,
|
|
299
|
+
errorMessage: lastErrMsg,
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
const raw = (await response.json());
|
|
303
|
+
// Only successful, non-errored verdicts are cached.
|
|
304
|
+
verdictCache.set(cacheKey, raw);
|
|
305
|
+
return finalize(raw, Date.now() - startedAt);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Single-claim ergonomic form (gate role).
|
|
309
|
+
* @example
|
|
310
|
+
* const v = await judge(result, 'identifies the failing dependency');
|
|
311
|
+
* if (!v.pass) { ... } // non-throwing
|
|
312
|
+
* (await judge(result, claim)).orThrow(); // explicit hard-stop
|
|
313
|
+
* await judge.observe(result, claim); // score-only, never gates
|
|
314
|
+
*/
|
|
315
|
+
export const judge = Object.assign((resultOrTrajectory, claimOrClaims, options) => runJudge(resultOrTrajectory, claimOrClaims, options, 'gate'), {
|
|
316
|
+
observe: (resultOrTrajectory, claimOrClaims, options) => runJudge(resultOrTrajectory, claimOrClaims, options, 'observe'),
|
|
317
|
+
});
|
|
318
|
+
/**
|
|
319
|
+
* Bind run-level defaults to `judge` and return a callable with the same
|
|
320
|
+
* signature. Used by the SDK runner to inject `run.evaluatorId` (and
|
|
321
|
+
* optionally a default judge model) into the `TestFixtures.judge` slot,
|
|
322
|
+
* so test bodies that destructure `({ judge })` automatically inherit
|
|
323
|
+
* the run's evaluator selection — matching the UI's behaviour where the
|
|
324
|
+
* evaluator picked on the run config applies to every judged test case.
|
|
325
|
+
*
|
|
326
|
+
* Per-call options always win over the bound defaults; pass an empty
|
|
327
|
+
* object (or omit the field) to fall through to the bound value.
|
|
328
|
+
*
|
|
329
|
+
* const boundJudge = bindJudge({ evaluatorId: run.evaluatorId });
|
|
330
|
+
* await boundJudge(result, claim); // uses run.evaluatorId
|
|
331
|
+
* await boundJudge(result, claim, { evaluatorId: 'other' }); // overrides
|
|
332
|
+
* await boundJudge(result, claim, { evaluatorId: undefined }); // still uses bound default
|
|
333
|
+
*/
|
|
334
|
+
export function bindJudge(defaults) {
|
|
335
|
+
// No defaults set → return the unbound function unchanged. Keeps zero
|
|
336
|
+
// overhead for tests that don't use a run-level evaluator. Note `skip` is
|
|
337
|
+
// compared against `undefined` (not falsiness) so a binding of
|
|
338
|
+
// `{ skip: false }` — a meaningful "force the judge to run" — is preserved
|
|
339
|
+
// rather than short-circuited to the unbound judge.
|
|
340
|
+
if (!defaults ||
|
|
341
|
+
(!defaults.evaluatorId && !defaults.model && !defaults.serverUrl && defaults.skip === undefined)) {
|
|
342
|
+
return judge;
|
|
343
|
+
}
|
|
344
|
+
const mergeOptions = (options) => ({
|
|
345
|
+
// Per-call options win on every field that's actually set. We treat
|
|
346
|
+
// an explicit `undefined` the same as a missing field — callers who
|
|
347
|
+
// want to *clear* a bound default should pass an empty string or
|
|
348
|
+
// call the unbound `judge` directly.
|
|
349
|
+
serverUrl: options?.serverUrl ?? defaults.serverUrl,
|
|
350
|
+
model: options?.model ?? defaults.model,
|
|
351
|
+
evaluatorId: options?.evaluatorId ?? defaults.evaluatorId,
|
|
352
|
+
skip: options?.skip ?? defaults.skip,
|
|
353
|
+
});
|
|
354
|
+
const bound = Object.assign((resultOrTrajectory, claimOrClaims, options) => runJudge(resultOrTrajectory, claimOrClaims, mergeOptions(options), 'gate'), {
|
|
355
|
+
observe: (resultOrTrajectory, claimOrClaims, options) => runJudge(resultOrTrajectory, claimOrClaims, mergeOptions(options), 'observe'),
|
|
356
|
+
});
|
|
357
|
+
return bound;
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=judge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.js","sourceRoot":"","sources":["../../../testCases/judge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { CodeTestCase, RegisteredHook } from './types.js';
|
|
2
|
+
export declare function isCodeFile(filename: string): boolean;
|
|
3
|
+
export { detectSourceLanguage } from '../../lib/utils.js';
|
|
4
|
+
export declare function computeTestCaseHash(tc: CodeTestCase, fileSource?: string): string;
|
|
5
|
+
export interface LoadedTestCase extends CodeTestCase {
|
|
6
|
+
hash: string;
|
|
7
|
+
}
|
|
8
|
+
export interface LoadResult {
|
|
9
|
+
testCases: LoadedTestCase[];
|
|
10
|
+
filePath: string;
|
|
11
|
+
/**
|
|
12
|
+
* Benchmark groups derived from `describe()` blocks in the file.
|
|
13
|
+
* Maps benchmark name (the joined describe path, e.g. 'RCA Suite' or
|
|
14
|
+
* 'A > B' for nested) to the test case names within. Tests outside any
|
|
15
|
+
* `describe()` are not in this map; they go to the file-default benchmark
|
|
16
|
+
* (CLI / server names it after the filename).
|
|
17
|
+
*/
|
|
18
|
+
benchmarks: Map<string, string[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Raw text of the eval file, read once up front (before execution) for
|
|
21
|
+
* BOTH .js and .ts/.mjs paths. Persisted verbatim as `sourceCode` on each
|
|
22
|
+
* imported TestCase (see cli/commands/benchmark.ts) so the Test Case
|
|
23
|
+
* detail page can render the whole file as an IDE-style code view --
|
|
24
|
+
* without this we'd only have the parsed `initialPrompt`/`expectedOutcomes`
|
|
25
|
+
* fields, not the `evaluate()` body that produced them.
|
|
26
|
+
*/
|
|
27
|
+
fileSource: string;
|
|
28
|
+
/**
|
|
29
|
+
* All lifecycle hooks (`beforeEach`/`afterEach`/`beforeAll`/`afterAll`)
|
|
30
|
+
* registered while loading this file. Empty when the file declares none.
|
|
31
|
+
* The orchestrator filters by `(sourceFile, describePath)` at run time.
|
|
32
|
+
*/
|
|
33
|
+
hooks: RegisteredHook[];
|
|
34
|
+
}
|
|
35
|
+
export declare function loadTestCasesFromModule(filePath: string): Promise<LoadResult>;
|
|
36
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../testCases/loader.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAW/D,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGpD;AAQD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAyBjF;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClC;;;;;;;OAOG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAiJnF"}
|