@opensearch-project/agent-health 0.3.0 → 0.5.2
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 +77 -6
- package/cli/dist/index.js +10072 -4502
- package/deployment/cloudformation/agent-health-observability.yaml +762 -0
- package/dist/assets/index-CCQRDlO0.js +243 -0
- package/dist/assets/index-CNHQVbcj.css +1 -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 +431 -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 +390 -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 +577 -0
- package/docs/SKILLS.md +264 -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 +598 -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/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/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/benchmarkVersionUtils.d.ts +37 -0
- package/lib/dist/lib/benchmarkVersionUtils.d.ts.map +1 -0
- package/lib/dist/lib/benchmarkVersionUtils.js +68 -0
- package/lib/dist/lib/benchmarkVersionUtils.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 +258 -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 +231 -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 +70 -0
- package/lib/dist/lib/constants.d.ts.map +1 -0
- package/lib/dist/lib/constants.js +365 -0
- package/lib/dist/lib/constants.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 +73 -0
- package/lib/dist/lib/envCompat.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 +55 -0
- package/lib/dist/lib/matchers/traces.d.ts.map +1 -0
- package/lib/dist/lib/matchers/traces.js +116 -0
- package/lib/dist/lib/matchers/traces.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 +92 -0
- package/lib/dist/lib/runStats.d.ts.map +1 -0
- package/lib/dist/lib/runStats.js +160 -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 +26 -0
- package/lib/dist/lib/testCases/loader.d.ts.map +1 -0
- package/lib/dist/lib/testCases/loader.js +149 -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 +96 -0
- package/lib/dist/lib/utils.d.ts.map +1 -0
- package/lib/dist/lib/utils.js +232 -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 +116 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js +403 -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 +418 -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 +64 -0
- package/lib/dist/services/evaluation/bedrockJudge.d.ts.map +1 -0
- package/lib/dist/services/evaluation/bedrockJudge.js +167 -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 +429 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.js.map +1 -0
- package/lib/dist/services/storage/asyncRunStorage.d.ts +127 -0
- package/lib/dist/services/storage/asyncRunStorage.d.ts.map +1 -0
- package/lib/dist/services/storage/asyncRunStorage.js +448 -0
- package/lib/dist/services/storage/asyncRunStorage.js.map +1 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.d.ts +156 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.d.ts.map +1 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.js +285 -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 +924 -0
- package/lib/dist/services/storage/opensearchClient.d.ts.map +1 -0
- package/lib/dist/services/storage/opensearchClient.js +435 -0
- package/lib/dist/services/storage/opensearchClient.js.map +1 -0
- package/lib/dist/services/traces/browserRecovery.d.ts +26 -0
- package/lib/dist/services/traces/browserRecovery.d.ts.map +1 -0
- package/lib/dist/services/traces/browserRecovery.js +81 -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 +251 -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 +387 -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 +84 -0
- package/lib/dist/services/traces/tracePoller.d.ts.map +1 -0
- package/lib/dist/services/traces/tracePoller.js +309 -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 +1175 -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 +64 -13
- package/server/dist/app.js +32651 -17637
- package/server/dist/index.js +29875 -14638
- package/tsconfig.lib.json +71 -0
- package/dist/assets/index-EvPLSTAS.js +0 -267
- package/dist/assets/index-RXasQKUs.css +0 -1
- package/lib/dist/config/index.js +0 -404
- package/lib/dist/index.js +0 -1665
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import type { TestCase, TrajectoryStep, AgentHooks } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Protocol type for agent communication
|
|
4
|
+
* - agui-streaming: AG-UI protocol over SSE (current default)
|
|
5
|
+
* - rest: Non-streaming REST API
|
|
6
|
+
* - openai-compatible: OpenAI chat completions format (LiteLLM, Ollama, vLLM)
|
|
7
|
+
* - subprocess: CLI tools invoked as child processes
|
|
8
|
+
* - claude-code: Claude Code CLI (specialized subprocess)
|
|
9
|
+
* - strands: Amazon Strands via Bedrock Agent Runtime API
|
|
10
|
+
* - langgraph: LangGraph agent via direct REST API
|
|
11
|
+
* - mock: Demo/testing connector
|
|
12
|
+
*/
|
|
13
|
+
export type ConnectorProtocol = 'agui-streaming' | 'rest' | 'openai-compatible' | 'subprocess' | 'claude-code' | 'kiro' | 'pi' | 'strands' | 'langgraph' | 'mock';
|
|
14
|
+
/**
|
|
15
|
+
* Authentication type for connectors
|
|
16
|
+
*/
|
|
17
|
+
export type ConnectorAuthType = 'none' | 'basic' | 'bearer' | 'api-key' | 'aws-sigv4';
|
|
18
|
+
/**
|
|
19
|
+
* Authentication configuration for connectors
|
|
20
|
+
* Each connector handles its own auth strategy
|
|
21
|
+
*/
|
|
22
|
+
export interface ConnectorAuth {
|
|
23
|
+
type: ConnectorAuthType;
|
|
24
|
+
username?: string;
|
|
25
|
+
password?: string;
|
|
26
|
+
token?: string;
|
|
27
|
+
awsRegion?: string;
|
|
28
|
+
awsService?: string;
|
|
29
|
+
awsAccessKeyId?: string;
|
|
30
|
+
awsSecretAccessKey?: string;
|
|
31
|
+
awsSessionToken?: string;
|
|
32
|
+
headers?: Record<string, string>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Standard request format that connectors transform to agent-specific format
|
|
36
|
+
*/
|
|
37
|
+
export interface ConnectorRequest {
|
|
38
|
+
testCase: TestCase;
|
|
39
|
+
modelId: string;
|
|
40
|
+
threadId?: string;
|
|
41
|
+
runId?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Pre-built payload from hook processing.
|
|
44
|
+
* When set, connectors should use this directly instead of calling buildPayload().
|
|
45
|
+
* This ensures that any modifications made by beforeRequest hooks are preserved.
|
|
46
|
+
*/
|
|
47
|
+
payload?: any;
|
|
48
|
+
/**
|
|
49
|
+
* Connector-specific configuration from agent config.
|
|
50
|
+
* Threaded from agent.connectorConfig at evaluation time.
|
|
51
|
+
*/
|
|
52
|
+
connectorConfig?: Record<string, any>;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Response from connector execution
|
|
56
|
+
*/
|
|
57
|
+
export interface ConnectorResponse {
|
|
58
|
+
trajectory: TrajectoryStep[];
|
|
59
|
+
runId: string | null;
|
|
60
|
+
rawEvents?: any[];
|
|
61
|
+
metadata?: Record<string, any>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Progress callback for streaming connectors
|
|
65
|
+
*/
|
|
66
|
+
export type ConnectorProgressCallback = (step: TrajectoryStep) => void;
|
|
67
|
+
/**
|
|
68
|
+
* Raw event callback for debugging
|
|
69
|
+
*/
|
|
70
|
+
export type ConnectorRawEventCallback = (event: any) => void;
|
|
71
|
+
/**
|
|
72
|
+
* Per-connector configuration for propagating OTel trace context to the
|
|
73
|
+
* downstream agent, so the agent's spans become children of agent-health's
|
|
74
|
+
* `test_case` eval span (single trace tree).
|
|
75
|
+
*
|
|
76
|
+
* Strategies (see AGENTS.md → "Trace correlation conventions"):
|
|
77
|
+
* A. propagateEnv — inject W3C TRACEPARENT env var into subprocess
|
|
78
|
+
* A. propagateHeader — inject W3C `traceparent` HTTP header into request
|
|
79
|
+
* C. serviceName — OpenSearch `service.name` to look for as a
|
|
80
|
+
* time-window fallback when A/B don't apply
|
|
81
|
+
* (opt-in via UI toggle on the run report).
|
|
82
|
+
*/
|
|
83
|
+
export interface TraceContextStrategy {
|
|
84
|
+
/** Inject W3C TRACEPARENT env var into the subprocess (Strategy A). */
|
|
85
|
+
propagateEnv?: boolean;
|
|
86
|
+
/** Inject W3C `traceparent` HTTP header (Strategy A). */
|
|
87
|
+
propagateHeader?: boolean;
|
|
88
|
+
/** Service name this connector's agent emits under in OpenSearch (Strategy C). */
|
|
89
|
+
serviceName?: string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Base connector interface - all connectors must implement this
|
|
93
|
+
*/
|
|
94
|
+
export interface AgentConnector {
|
|
95
|
+
/** Unique identifier for this connector type */
|
|
96
|
+
readonly type: ConnectorProtocol;
|
|
97
|
+
/** Human-readable name */
|
|
98
|
+
readonly name: string;
|
|
99
|
+
/** Whether this connector supports streaming */
|
|
100
|
+
readonly supportsStreaming: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Transform standard request to agent-specific payload
|
|
103
|
+
*/
|
|
104
|
+
buildPayload(request: ConnectorRequest): any;
|
|
105
|
+
/**
|
|
106
|
+
* Execute the request and return trajectory
|
|
107
|
+
* @param endpoint - Agent endpoint URL or command
|
|
108
|
+
* @param request - Standard request format
|
|
109
|
+
* @param auth - Authentication configuration
|
|
110
|
+
* @param onProgress - Optional callback for streaming progress
|
|
111
|
+
* @param onRawEvent - Optional callback for raw events (debugging)
|
|
112
|
+
*/
|
|
113
|
+
execute(endpoint: string, request: ConnectorRequest, auth: ConnectorAuth, onProgress?: ConnectorProgressCallback, onRawEvent?: ConnectorRawEventCallback): Promise<ConnectorResponse>;
|
|
114
|
+
/**
|
|
115
|
+
* Parse raw response into TrajectoryStep array
|
|
116
|
+
* Used internally by execute() and for re-processing stored raw events
|
|
117
|
+
*/
|
|
118
|
+
parseResponse(rawResponse: any): TrajectoryStep[];
|
|
119
|
+
/**
|
|
120
|
+
* Optional health check for the connector
|
|
121
|
+
*/
|
|
122
|
+
healthCheck?(endpoint: string, auth: ConnectorAuth): Promise<boolean>;
|
|
123
|
+
/**
|
|
124
|
+
* Optional trace-context propagation strategy. Defaults provided by each
|
|
125
|
+
* connector class; users may override per-agent via `connectorConfig.traceContext`.
|
|
126
|
+
*/
|
|
127
|
+
traceContext?: TraceContextStrategy;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Input mode for subprocess connectors
|
|
131
|
+
*/
|
|
132
|
+
export type SubprocessInputMode = 'stdin' | 'arg';
|
|
133
|
+
/**
|
|
134
|
+
* Output parser type for subprocess connectors
|
|
135
|
+
*/
|
|
136
|
+
export type SubprocessOutputParser = 'json' | 'text' | 'streaming';
|
|
137
|
+
/**
|
|
138
|
+
* Configuration for subprocess-based connectors
|
|
139
|
+
*/
|
|
140
|
+
export interface SubprocessConfig {
|
|
141
|
+
command: string;
|
|
142
|
+
args?: string[];
|
|
143
|
+
env?: Record<string, string>;
|
|
144
|
+
inputMode: SubprocessInputMode;
|
|
145
|
+
outputParser: SubprocessOutputParser;
|
|
146
|
+
timeout?: number;
|
|
147
|
+
workingDir?: string;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Extended AgentConfig with connector specification
|
|
151
|
+
* Extends the base AgentConfig from types/index.ts
|
|
152
|
+
*/
|
|
153
|
+
export interface AgentConfigWithConnector {
|
|
154
|
+
key: string;
|
|
155
|
+
name: string;
|
|
156
|
+
endpoint: string;
|
|
157
|
+
description?: string;
|
|
158
|
+
enabled?: boolean;
|
|
159
|
+
models: string[];
|
|
160
|
+
headers?: Record<string, string>;
|
|
161
|
+
useTraces?: boolean;
|
|
162
|
+
/** Connector type to use (defaults to 'agui-streaming' for backwards compat) */
|
|
163
|
+
connectorType?: ConnectorProtocol;
|
|
164
|
+
/** Connector-specific configuration */
|
|
165
|
+
connectorConfig?: SubprocessConfig | Record<string, any>;
|
|
166
|
+
/** Authentication configuration */
|
|
167
|
+
auth?: ConnectorAuth;
|
|
168
|
+
/** Lifecycle hooks for custom setup/transform logic */
|
|
169
|
+
hooks?: AgentHooks;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Registry for connector implementations
|
|
173
|
+
* Allows code-level registration of new connectors
|
|
174
|
+
*/
|
|
175
|
+
export interface ConnectorRegistry {
|
|
176
|
+
/**
|
|
177
|
+
* Register a connector implementation
|
|
178
|
+
*/
|
|
179
|
+
register(connector: AgentConnector): void;
|
|
180
|
+
/**
|
|
181
|
+
* Get a connector by protocol type
|
|
182
|
+
*/
|
|
183
|
+
get(type: ConnectorProtocol): AgentConnector | undefined;
|
|
184
|
+
/**
|
|
185
|
+
* Get all registered connectors
|
|
186
|
+
*/
|
|
187
|
+
getAll(): AgentConnector[];
|
|
188
|
+
/**
|
|
189
|
+
* Check if a connector is registered
|
|
190
|
+
*/
|
|
191
|
+
has(type: ConnectorProtocol): boolean;
|
|
192
|
+
/**
|
|
193
|
+
* Get connector for an agent config (with fallback to default)
|
|
194
|
+
*/
|
|
195
|
+
getForAgent(agent: AgentConfigWithConnector): AgentConnector;
|
|
196
|
+
/**
|
|
197
|
+
* Get list of registered connector types
|
|
198
|
+
*/
|
|
199
|
+
getRegisteredTypes(): ConnectorProtocol[];
|
|
200
|
+
/**
|
|
201
|
+
* Clear all registered connectors (useful for testing)
|
|
202
|
+
*/
|
|
203
|
+
clear(): void;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Options for connector execution
|
|
207
|
+
*/
|
|
208
|
+
export interface ConnectorExecuteOptions {
|
|
209
|
+
timeout?: number;
|
|
210
|
+
retries?: number;
|
|
211
|
+
retryDelay?: number;
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../services/connectors/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../services/connectors/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bedrock LLM Judge Client
|
|
3
|
+
* Calls backend proxy for AWS Bedrock evaluations
|
|
4
|
+
*/
|
|
5
|
+
import { TrajectoryStep, EvaluationMetrics, ImprovementStrategy, OpenSearchLog, PassFailStatus } from '../../types/index.js';
|
|
6
|
+
interface JudgeResult {
|
|
7
|
+
passFailStatus: PassFailStatus;
|
|
8
|
+
metrics: EvaluationMetrics;
|
|
9
|
+
llmJudgeReasoning: string;
|
|
10
|
+
improvementStrategies: ImprovementStrategy[];
|
|
11
|
+
judgeDurationMs?: number;
|
|
12
|
+
judgeAttempts?: number;
|
|
13
|
+
/** Raw text the judge model emitted (forwarded from /api/judge). */
|
|
14
|
+
rawResponse?: string;
|
|
15
|
+
/** Extra JSON keys the model emitted that weren't typed wire fields. */
|
|
16
|
+
extraFields?: Record<string, unknown>;
|
|
17
|
+
/** System/user prompts the judge actually saw (when AH_JUDGE_DEBUG=1). */
|
|
18
|
+
judgeDebug?: {
|
|
19
|
+
provider?: string;
|
|
20
|
+
modelId?: string;
|
|
21
|
+
evaluatorId?: string;
|
|
22
|
+
systemPrompt?: string;
|
|
23
|
+
userPrompt?: string;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
interface ExpectedBehavior {
|
|
27
|
+
expectedOutcomes?: string[];
|
|
28
|
+
expectedTrajectory?: any[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Real Bedrock Judge implementation via backend proxy with exponential backoff retry
|
|
32
|
+
* Calls the backend API which handles AWS Bedrock communication
|
|
33
|
+
* The backend routes to the appropriate provider (demo/bedrock/ollama) based on modelId
|
|
34
|
+
* @param trajectory - The agent's execution trajectory
|
|
35
|
+
* @param expected - Expected outcomes or trajectory
|
|
36
|
+
* @param logs - Optional OpenSearch logs
|
|
37
|
+
* @param onProgress - Optional progress callback
|
|
38
|
+
* @param modelId - Model ID for judge evaluation (determines provider routing)
|
|
39
|
+
* @param evaluatorId - Optional saved evaluator id (resolves the system prompt server-side)
|
|
40
|
+
* @param runId - Agent run id. Forwarded so the `agent` (trace) judge provider's
|
|
41
|
+
* read-only `query_spans` / `query_logs` tools can scope to this single run.
|
|
42
|
+
* Without it the route 400s with `runId is required for the agent (trace)
|
|
43
|
+
* judge provider`. For other providers it's ignored. Pre-fix the runner
|
|
44
|
+
* never forwarded this even when known on the report, so picking the
|
|
45
|
+
* `agent-trace-judge` model from the UI Judge Model dropdown always
|
|
46
|
+
* failed at the route layer.
|
|
47
|
+
* @param agents - Optional Strategy C correlation hints (service.name +
|
|
48
|
+
* time-window) for the agent (trace) judge. The trace tool unions
|
|
49
|
+
* Strategy B (`runIds`) with these so spans the agent emits under its
|
|
50
|
+
* own correlation (claude-code's session id, etc.) are findable. See #264.
|
|
51
|
+
*/
|
|
52
|
+
export declare function callBedrockJudge(trajectory: TrajectoryStep[], expected: ExpectedBehavior, logs?: OpenSearchLog[], onProgress?: (chunk: string) => void, modelId?: string, evaluatorId?: string, runId?: string, agents?: Array<{
|
|
53
|
+
serviceName: string;
|
|
54
|
+
startedAt: number;
|
|
55
|
+
endedAt: number;
|
|
56
|
+
sessionId?: string;
|
|
57
|
+
}>): Promise<JudgeResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Simulate Bedrock Judge evaluation (fallback for testing)
|
|
60
|
+
* @deprecated Use callBedrockJudge for real evaluations
|
|
61
|
+
*/
|
|
62
|
+
export declare function simulateBedrockJudge(trajectory: TrajectoryStep[], expectedTrajectory: any[]): JudgeResult;
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=bedrockJudge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bedrockJudge.d.ts","sourceRoot":"","sources":["../../../../services/evaluation/bedrockJudge.ts"],"names":[],"mappings":"AAKA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAIhH,UAAU,WAAW;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,mBAAmB,EAAE,CAAC;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,0EAA0E;IAC1E,UAAU,CAAC,EAAE;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AASD,UAAU,gBAAgB;IACxB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,kBAAkB,CAAC,EAAE,GAAG,EAAE,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,cAAc,EAAE,EAC5B,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,CAAC,EAAE,aAAa,EAAE,EACtB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACpC,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9F,OAAO,CAAC,WAAW,CAAC,CAmHtB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,cAAc,EAAE,EAC5B,kBAAkB,EAAE,GAAG,EAAE,GACxB,WAAW,CA+Bb"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { ENV_CONFIG } from '../../lib/config.js';
|
|
6
|
+
import { getBackendUrl } from '../../lib/portConfig.js';
|
|
7
|
+
/**
|
|
8
|
+
* Sleep utility for retry delays
|
|
9
|
+
*/
|
|
10
|
+
function sleep(ms) {
|
|
11
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Real Bedrock Judge implementation via backend proxy with exponential backoff retry
|
|
15
|
+
* Calls the backend API which handles AWS Bedrock communication
|
|
16
|
+
* The backend routes to the appropriate provider (demo/bedrock/ollama) based on modelId
|
|
17
|
+
* @param trajectory - The agent's execution trajectory
|
|
18
|
+
* @param expected - Expected outcomes or trajectory
|
|
19
|
+
* @param logs - Optional OpenSearch logs
|
|
20
|
+
* @param onProgress - Optional progress callback
|
|
21
|
+
* @param modelId - Model ID for judge evaluation (determines provider routing)
|
|
22
|
+
* @param evaluatorId - Optional saved evaluator id (resolves the system prompt server-side)
|
|
23
|
+
* @param runId - Agent run id. Forwarded so the `agent` (trace) judge provider's
|
|
24
|
+
* read-only `query_spans` / `query_logs` tools can scope to this single run.
|
|
25
|
+
* Without it the route 400s with `runId is required for the agent (trace)
|
|
26
|
+
* judge provider`. For other providers it's ignored. Pre-fix the runner
|
|
27
|
+
* never forwarded this even when known on the report, so picking the
|
|
28
|
+
* `agent-trace-judge` model from the UI Judge Model dropdown always
|
|
29
|
+
* failed at the route layer.
|
|
30
|
+
* @param agents - Optional Strategy C correlation hints (service.name +
|
|
31
|
+
* time-window) for the agent (trace) judge. The trace tool unions
|
|
32
|
+
* Strategy B (`runIds`) with these so spans the agent emits under its
|
|
33
|
+
* own correlation (claude-code's session id, etc.) are findable. See #264.
|
|
34
|
+
*/
|
|
35
|
+
export async function callBedrockJudge(trajectory, expected, logs, onProgress, modelId, evaluatorId, runId, agents) {
|
|
36
|
+
const maxRetries = 10;
|
|
37
|
+
const baseDelay = 1000; // 1 second
|
|
38
|
+
const judgeApiUrl = ENV_CONFIG.judgeApiUrl || `${getBackendUrl()}/api/judge`;
|
|
39
|
+
console.log('[BedrockJudge] Sending request to backend proxy...');
|
|
40
|
+
console.log('[BedrockJudge] Trajectory steps:', trajectory.length);
|
|
41
|
+
console.log('[BedrockJudge] Expected outcomes:', expected.expectedOutcomes?.length || 0);
|
|
42
|
+
console.log('[BedrockJudge] Expected trajectory steps:', expected.expectedTrajectory?.length || 0);
|
|
43
|
+
console.log('[BedrockJudge] Logs provided:', logs?.length || 0);
|
|
44
|
+
console.log('[BedrockJudge] Model:', modelId || '(using default)');
|
|
45
|
+
const judgeStartTime = Date.now();
|
|
46
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
47
|
+
try {
|
|
48
|
+
console.log(`[BedrockJudge] Attempt ${attempt}/${maxRetries}`);
|
|
49
|
+
// Call backend proxy
|
|
50
|
+
const startTime = Date.now();
|
|
51
|
+
const response = await fetch(judgeApiUrl, {
|
|
52
|
+
method: 'POST',
|
|
53
|
+
headers: {
|
|
54
|
+
'Content-Type': 'application/json',
|
|
55
|
+
},
|
|
56
|
+
body: JSON.stringify({
|
|
57
|
+
trajectory,
|
|
58
|
+
expectedOutcomes: expected.expectedOutcomes,
|
|
59
|
+
expectedTrajectory: expected.expectedTrajectory,
|
|
60
|
+
logs,
|
|
61
|
+
modelId,
|
|
62
|
+
...(evaluatorId ? { evaluatorId } : {}),
|
|
63
|
+
// Forward runId so /api/judge can route to the `agent` (trace)
|
|
64
|
+
// provider — its tools require this to scope. Other providers
|
|
65
|
+
// ignore it.
|
|
66
|
+
...(runId ? { runId } : {}),
|
|
67
|
+
// Forward Strategy C correlation hints (#264) so the agent (trace)
|
|
68
|
+
// judge tool can find spans the agent emits under its OWN
|
|
69
|
+
// correlation (claude-code's session id, etc.), not just spans
|
|
70
|
+
// that share agent-health's runId via gen_ai.request.id.
|
|
71
|
+
...(agents && agents.length > 0 ? { agents } : {}),
|
|
72
|
+
}),
|
|
73
|
+
});
|
|
74
|
+
if (!response.ok) {
|
|
75
|
+
const errorData = await response.json();
|
|
76
|
+
const errorMessage = errorData.error || `API request failed with status ${response.status}`;
|
|
77
|
+
// 4xx client errors are validation failures — retrying won't help
|
|
78
|
+
if (response.status >= 400 && response.status < 500) {
|
|
79
|
+
throw Object.assign(new Error(`Bedrock Judge validation error (not retryable): ${errorMessage}`), { nonRetryable: true });
|
|
80
|
+
}
|
|
81
|
+
throw new Error(errorMessage);
|
|
82
|
+
}
|
|
83
|
+
const result = await response.json();
|
|
84
|
+
const duration = Date.now() - startTime;
|
|
85
|
+
console.log('[BedrockJudge] ✓ Evaluation completed in', duration, 'ms');
|
|
86
|
+
console.log('[BedrockJudge] Pass/Fail Status:', result.passFailStatus?.toUpperCase());
|
|
87
|
+
console.log('[BedrockJudge] Metrics:', result.metrics);
|
|
88
|
+
console.log('[BedrockJudge] Improvement strategies:', result.improvementStrategies?.length || 0);
|
|
89
|
+
// Call onProgress with the full reasoning if provided
|
|
90
|
+
if (onProgress && result.llmJudgeReasoning) {
|
|
91
|
+
onProgress(result.llmJudgeReasoning);
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
passFailStatus: result.passFailStatus || 'failed', // Default to failed if missing
|
|
95
|
+
metrics: result.metrics,
|
|
96
|
+
llmJudgeReasoning: result.llmJudgeReasoning,
|
|
97
|
+
improvementStrategies: result.improvementStrategies || [],
|
|
98
|
+
judgeDurationMs: Date.now() - judgeStartTime,
|
|
99
|
+
judgeAttempts: attempt,
|
|
100
|
+
// Forward debug breadcrumbs from the route so the runner can persist
|
|
101
|
+
// them on the run document. These are absent in older /api/judge
|
|
102
|
+
// responses (back-compat) and in production unless AH_JUDGE_DEBUG=1.
|
|
103
|
+
rawResponse: result.rawResponse,
|
|
104
|
+
extraFields: result.extraFields,
|
|
105
|
+
judgeDebug: result.judgeDebug,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
const isLastAttempt = attempt === maxRetries;
|
|
110
|
+
let errorMessage = 'Unknown error occurred';
|
|
111
|
+
if (error instanceof Error) {
|
|
112
|
+
errorMessage = error.message;
|
|
113
|
+
// Check for network errors
|
|
114
|
+
if (errorMessage.includes('Failed to fetch') || errorMessage.includes('NetworkError')) {
|
|
115
|
+
errorMessage = `Cannot connect to Bedrock Judge backend at ${judgeApiUrl}. Please ensure the backend proxy server is running.`;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
console.error(`[BedrockJudge] Attempt ${attempt} failed:`, errorMessage);
|
|
119
|
+
// Fail fast on non-retryable errors (4xx validation failures)
|
|
120
|
+
if (error?.nonRetryable) {
|
|
121
|
+
throw error;
|
|
122
|
+
}
|
|
123
|
+
// If this is the last attempt, throw the error
|
|
124
|
+
if (isLastAttempt) {
|
|
125
|
+
throw new Error(`Bedrock Judge evaluation failed after ${maxRetries} attempts: ${errorMessage}`);
|
|
126
|
+
}
|
|
127
|
+
// Calculate exponential backoff delay: 1s, 2s, 4s
|
|
128
|
+
const delay = baseDelay * Math.pow(2, attempt - 1);
|
|
129
|
+
console.log(`[BedrockJudge] Retrying in ${delay}ms...`);
|
|
130
|
+
await sleep(delay);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// This should never be reached due to throw in last attempt, but TypeScript needs it
|
|
134
|
+
throw new Error('Bedrock Judge evaluation failed: Maximum retries exceeded');
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Simulate Bedrock Judge evaluation (fallback for testing)
|
|
138
|
+
* @deprecated Use callBedrockJudge for real evaluations
|
|
139
|
+
*/
|
|
140
|
+
export function simulateBedrockJudge(trajectory, expectedTrajectory) {
|
|
141
|
+
console.warn('[BedrockJudge] Using simulated judge - this is for testing only');
|
|
142
|
+
const hasRequiredTools = expectedTrajectory.every(exp => trajectory.some(t => t.toolName && exp.requiredTools.includes(t.toolName)));
|
|
143
|
+
const accuracy = hasRequiredTools ? 92 : 65;
|
|
144
|
+
const faithfulness = 95;
|
|
145
|
+
const latency_score = 88;
|
|
146
|
+
return {
|
|
147
|
+
passFailStatus: hasRequiredTools ? 'passed' : 'failed',
|
|
148
|
+
metrics: {
|
|
149
|
+
accuracy,
|
|
150
|
+
faithfulness,
|
|
151
|
+
latency_score,
|
|
152
|
+
trajectory_alignment_score: hasRequiredTools ? 85 : 40
|
|
153
|
+
},
|
|
154
|
+
llmJudgeReasoning: hasRequiredTools
|
|
155
|
+
? "The agent successfully followed the standard RCA procedure. It correctly identified the problematic node using `opensearch_nodes_stats` after checking health."
|
|
156
|
+
: "The agent deviated from the expected path. It jumped to conclusions without verifying individual node statistics first, missing the specific CPU spike confirmation.",
|
|
157
|
+
improvementStrategies: [
|
|
158
|
+
{
|
|
159
|
+
category: 'tool_usage',
|
|
160
|
+
issue: 'Missing comprehensive health check',
|
|
161
|
+
recommendation: 'Always start with cluster health check before diving into specific nodes',
|
|
162
|
+
priority: 'high'
|
|
163
|
+
}
|
|
164
|
+
]
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=bedrockJudge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bedrockJudge.js","sourceRoot":"","sources":["../../../../services/evaluation/bedrockJudge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for representing *evaluator failures* on a run.
|
|
3
|
+
*
|
|
4
|
+
* Issue #242: a non-retryable judge / evaluator validation error used to be
|
|
5
|
+
* recorded as a normal `completed` run with `metrics: { … all 0 }` and the
|
|
6
|
+
* surface field `llmJudgeReasoning` left at its `'Waiting for traces to
|
|
7
|
+
* become available...'` placeholder. From a user's perspective that was
|
|
8
|
+
* indistinguishable from "the agent answered terribly" — the actual cause
|
|
9
|
+
* (e.g. `Missing required field: expectedOutcomes`) was hidden in a
|
|
10
|
+
* separate `traceError` field that nothing surfaced in the UI or in
|
|
11
|
+
* benchmark summaries.
|
|
12
|
+
*
|
|
13
|
+
* Two things every error site must do consistently:
|
|
14
|
+
* 1. Set `metricsStatus: 'error'` so stats aggregation can bucket the run
|
|
15
|
+
* into `errored` instead of `failed` (see {@link RunStats}).
|
|
16
|
+
* 2. Replace `llmJudgeReasoning` with a clearly-labelled error message
|
|
17
|
+
* reflecting the *actual* terminal cause, so the run-report Judge tab
|
|
18
|
+
* stops showing the misleading "waiting for traces" placeholder.
|
|
19
|
+
*
|
|
20
|
+
* `buildEvaluatorErrorPatch()` returns the canonical patch payload covering
|
|
21
|
+
* both. Use it everywhere you would otherwise hand-roll
|
|
22
|
+
* `{ metricsStatus: 'error', traceError: ... }`.
|
|
23
|
+
*/
|
|
24
|
+
export type EvaluatorErrorKind = 'judge_failed' | 'agent_failed' | 'trace_timeout' | 'trace_incomplete' | 'trace_callback_failed' | 'trace_fetch_failed' | 'unknown';
|
|
25
|
+
export interface EvaluatorErrorPatch {
|
|
26
|
+
metricsStatus: 'error';
|
|
27
|
+
/** Machine-readable cause, persisted alongside the run. */
|
|
28
|
+
traceError: string;
|
|
29
|
+
/** Human-readable surface message shown in the Judge tab. */
|
|
30
|
+
llmJudgeReasoning: string;
|
|
31
|
+
/**
|
|
32
|
+
* Pass/fail is meaningless when the evaluator never ran — set to `null`
|
|
33
|
+
* so the storage layer (`asyncRunStorage.updateReport`) actually CLEARS
|
|
34
|
+
* the field on the persisted document. Using `undefined` here would be
|
|
35
|
+
* filtered out by the typical `!== undefined` allow-list, leaving a
|
|
36
|
+
* stale `'passed'` / `'failed'` on disk inconsistent with
|
|
37
|
+
* `metricsStatus: 'error'`.
|
|
38
|
+
*/
|
|
39
|
+
passFailStatus: null;
|
|
40
|
+
/** Reset metrics so charts don't graph the placeholder zeroes as a real run. */
|
|
41
|
+
metrics: {
|
|
42
|
+
accuracy: 0;
|
|
43
|
+
faithfulness: 0;
|
|
44
|
+
latency_score: 0;
|
|
45
|
+
trajectory_alignment_score: 0;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Build the canonical "evaluator could not run" patch for `runs.update()`.
|
|
50
|
+
*
|
|
51
|
+
* @param kind short tag used in logs and as the `traceError` prefix
|
|
52
|
+
* @param error the underlying error or message; we extract `.message`
|
|
53
|
+
* when given an Error so logs aren't `[object Object]`
|
|
54
|
+
*/
|
|
55
|
+
export declare function buildEvaluatorErrorPatch(kind: EvaluatorErrorKind, error: unknown): EvaluatorErrorPatch;
|
|
56
|
+
//# sourceMappingURL=evaluatorError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluatorError.d.ts","sourceRoot":"","sources":["../../../../services/evaluation/evaluatorError.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,cAAc,GACd,eAAe,GACf,kBAAkB,GAClB,uBAAuB,GACvB,oBAAoB,GACpB,SAAS,CAAC;AAEd,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,OAAO,CAAC;IACvB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;;;;OAOG;IACH,cAAc,EAAE,IAAI,CAAC;IACrB,gFAAgF;IAChF,OAAO,EAAE;QAAE,QAAQ,EAAE,CAAC,CAAC;QAAC,YAAY,EAAE,CAAC,CAAC;QAAC,aAAa,EAAE,CAAC,CAAC;QAAC,0BAA0B,EAAE,CAAC,CAAA;KAAE,CAAC;CAC5F;AAYD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,OAAO,GACb,mBAAmB,CAmCrB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
const KIND_LABEL = {
|
|
6
|
+
judge_failed: 'Judge evaluation failed',
|
|
7
|
+
agent_failed: 'Agent run did not complete',
|
|
8
|
+
trace_timeout: 'Traces never arrived',
|
|
9
|
+
trace_incomplete: 'Trace did not converge',
|
|
10
|
+
trace_callback_failed: 'Post-trace callback failed',
|
|
11
|
+
trace_fetch_failed: 'Trace fetch failed',
|
|
12
|
+
unknown: 'Evaluator error',
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Build the canonical "evaluator could not run" patch for `runs.update()`.
|
|
16
|
+
*
|
|
17
|
+
* @param kind short tag used in logs and as the `traceError` prefix
|
|
18
|
+
* @param error the underlying error or message; we extract `.message`
|
|
19
|
+
* when given an Error so logs aren't `[object Object]`
|
|
20
|
+
*/
|
|
21
|
+
export function buildEvaluatorErrorPatch(kind, error) {
|
|
22
|
+
const message = error instanceof Error
|
|
23
|
+
? error.message
|
|
24
|
+
: typeof error === 'string'
|
|
25
|
+
? error
|
|
26
|
+
: 'Unknown error';
|
|
27
|
+
const label = KIND_LABEL[kind];
|
|
28
|
+
// `agent_failed` is not an *evaluator* failure — the agent itself never
|
|
29
|
+
// produced a trajectory (timeout/crash). Use prose that says so, instead of
|
|
30
|
+
// the misleading "the evaluator failed" wording, so the Judge tab is honest.
|
|
31
|
+
const isAgent = kind === 'agent_failed';
|
|
32
|
+
return {
|
|
33
|
+
metricsStatus: 'error',
|
|
34
|
+
// Both the human label AND the machine-readable kind token are
|
|
35
|
+
// included — logs / dashboards can grep by `kind=judge_failed`
|
|
36
|
+
// without having to parse the human label, while users skimming
|
|
37
|
+
// a trace view still see the friendly prose form. Format:
|
|
38
|
+
// `<Human Label> (kind=<kind>): <underlying message>`.
|
|
39
|
+
traceError: `${label} (kind=${kind}): ${message}`,
|
|
40
|
+
// The Judge tab renders this directly. Keep the prose concise and
|
|
41
|
+
// explicit: the user must immediately see *why* there is no score.
|
|
42
|
+
llmJudgeReasoning: isAgent
|
|
43
|
+
? `**Agent run did not complete.**\n\n` +
|
|
44
|
+
`The agent failed to produce a result (e.g. a subprocess timeout or crash) before ` +
|
|
45
|
+
`the evaluation could run, so there is no trajectory to judge. This run is excluded ` +
|
|
46
|
+
`from pass-rate aggregation.\n\n` +
|
|
47
|
+
`**Reason (${kind}):** ${message}`
|
|
48
|
+
: `**Evaluator could not run.**\n\n` +
|
|
49
|
+
`The agent may have completed normally, but the evaluator (judge or trace pipeline) ` +
|
|
50
|
+
`failed before it could produce a verdict. This run is excluded from pass-rate aggregation.\n\n` +
|
|
51
|
+
`**Reason (${kind}):** ${message}`,
|
|
52
|
+
passFailStatus: null,
|
|
53
|
+
metrics: { accuracy: 0, faithfulness: 0, latency_score: 0, trajectory_alignment_score: 0 },
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=evaluatorError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluatorError.js","sourceRoot":"","sources":["../../../../services/evaluation/evaluatorError.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsDH,MAAM,UAAU,GAAuC;IACrD,YAAY,EAAE,yBAAyB;IACvC,YAAY,EAAE,4BAA4B;IAC1C,aAAa,EAAE,sBAAsB;IACrC,gBAAgB,EAAE,wBAAwB;IAC1C,qBAAqB,EAAE,4BAA4B;IACnD,kBAAkB,EAAE,oBAAoB;IACxC,OAAO,EAAE,iBAAiB;CAC3B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAAwB,EACxB,KAAc;IAEd,MAAM,OAAO,GACX,KAAK,YAAY,KAAK;QACpB,CAAC,CAAC,KAAK,CAAC,OAAO;QACf,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,eAAe,CAAC;IACxB,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,wEAAwE;IACxE,4EAA4E;IAC5E,6EAA6E;IAC7E,MAAM,OAAO,GAAG,IAAI,KAAK,cAAc,CAAC;IACxC,OAAO;QACL,aAAa,EAAE,OAAO;QACtB,+DAA+D;QAC/D,+DAA+D;QAC/D,gEAAgE;QAChE,0DAA0D;QAC1D,uDAAuD;QACvD,UAAU,EAAE,GAAG,KAAK,UAAU,IAAI,MAAM,OAAO,EAAE;QACjD,kEAAkE;QAClE,mEAAmE;QACnE,iBAAiB,EAAE,OAAO;YACxB,CAAC,CAAC,qCAAqC;gBACrC,mFAAmF;gBACnF,qFAAqF;gBACrF,iCAAiC;gBACjC,aAAa,IAAI,QAAQ,OAAO,EAAE;YACpC,CAAC,CAAC,kCAAkC;gBAClC,qFAAqF;gBACrF,gGAAgG;gBAChG,aAAa,IAAI,QAAQ,OAAO,EAAE;QACtC,cAAc,EAAE,IAAI;QACpB,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,0BAA0B,EAAE,CAAC,EAAE;KAC3F,CAAC;AACJ,CAAC"}
|