@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,27 @@
|
|
|
1
|
+
/** Whether the given Bedrock model still accepts an explicit `temperature`. */
|
|
2
|
+
export declare function modelSupportsTemperature(modelId: string): boolean;
|
|
3
|
+
/**
|
|
4
|
+
* Build a Converse `inferenceConfig`, including `temperature` only when the
|
|
5
|
+
* target model accepts it. Callers pass their preferred temperature; for
|
|
6
|
+
* models that have deprecated the parameter it is silently omitted (the
|
|
7
|
+
* model's own default applies).
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildInferenceConfig(modelId: string, opts: {
|
|
10
|
+
maxTokens: number;
|
|
11
|
+
temperature?: number;
|
|
12
|
+
}): {
|
|
13
|
+
maxTokens: number;
|
|
14
|
+
temperature?: number;
|
|
15
|
+
};
|
|
16
|
+
/** Inference-profile prefix appropriate for the given (or current) AWS region. */
|
|
17
|
+
export declare function regionInferencePrefix(region?: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Re-home a cross-region inference-profile id to the active AWS region.
|
|
20
|
+
*
|
|
21
|
+
* `us.anthropic.claude-...` → `eu.anthropic.claude-...` when running in an
|
|
22
|
+
* EU region, etc. Ids that carry no regional prefix (bare model ids,
|
|
23
|
+
* `global.` profiles, non-Bedrock ids like `mock://` or `gpt-4o`) are
|
|
24
|
+
* returned unchanged.
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolveRegionAwareModelId(modelId: string, region?: string): string;
|
|
27
|
+
//# sourceMappingURL=bedrockCompat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bedrockCompat.d.ts","sourceRoot":"","sources":["../../bedrockCompat.ts"],"names":[],"mappings":"AAmCA,+EAA+E;AAC/E,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGjE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAM7C;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAU7D;AAID;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CASlF"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Bedrock model compatibility helpers shared by every Bedrock Converse call
|
|
7
|
+
* site (judge, skill eval generator, skill improver, failure clustering,
|
|
8
|
+
* assistant fallback).
|
|
9
|
+
*
|
|
10
|
+
* Two concerns live here so the policy is defined exactly once:
|
|
11
|
+
*
|
|
12
|
+
* 1. **Temperature deprecation** — newer Anthropic models (Claude Opus 4.5+,
|
|
13
|
+
* Sonnet 4.6+, and the Claude 5 family incl. Fable/Mythos) reject an
|
|
14
|
+
* explicit `temperature` with `ValidationException: 'temperature' is
|
|
15
|
+
* deprecated for this model`. `buildInferenceConfig()` omits the field for
|
|
16
|
+
* those models and lets the model use its default. (GitHub issue #299)
|
|
17
|
+
*
|
|
18
|
+
* 2. **Region-aware inference profiles** — the default model registry pins
|
|
19
|
+
* `us.`-prefixed cross-region inference profile ids, which only resolve
|
|
20
|
+
* from US regions. `resolveRegionAwareModelId()` swaps the prefix to the
|
|
21
|
+
* one matching the active AWS region (`eu.` / `apac.`) at call time, so
|
|
22
|
+
* the registry itself stays region-neutral. (GitHub issue #298)
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Model-id patterns that have deprecated the `temperature` parameter.
|
|
26
|
+
* Matched case-insensitively against the full model/inference-profile id.
|
|
27
|
+
*/
|
|
28
|
+
const TEMPERATURE_DEPRECATED_PATTERNS = [
|
|
29
|
+
/claude-opus-4-[5-9]/, // Opus 4.5, 4.6, 4.7, 4.8, ...
|
|
30
|
+
/claude-sonnet-4-[6-9]/, // Sonnet 4.6+ (4.5 still accepts temperature)
|
|
31
|
+
/claude-[a-z]+-5(?![0-9])/, // Claude 5 family: fable-5, mythos-5, opus-5, sonnet-5, ...
|
|
32
|
+
];
|
|
33
|
+
/** Whether the given Bedrock model still accepts an explicit `temperature`. */
|
|
34
|
+
export function modelSupportsTemperature(modelId) {
|
|
35
|
+
const id = (modelId || '').toLowerCase();
|
|
36
|
+
return !TEMPERATURE_DEPRECATED_PATTERNS.some((p) => p.test(id));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Build a Converse `inferenceConfig`, including `temperature` only when the
|
|
40
|
+
* target model accepts it. Callers pass their preferred temperature; for
|
|
41
|
+
* models that have deprecated the parameter it is silently omitted (the
|
|
42
|
+
* model's own default applies).
|
|
43
|
+
*/
|
|
44
|
+
export function buildInferenceConfig(modelId, opts) {
|
|
45
|
+
const cfg = { maxTokens: opts.maxTokens };
|
|
46
|
+
if (opts.temperature !== undefined && modelSupportsTemperature(modelId)) {
|
|
47
|
+
cfg.temperature = opts.temperature;
|
|
48
|
+
}
|
|
49
|
+
return cfg;
|
|
50
|
+
}
|
|
51
|
+
/** Inference-profile prefix appropriate for the given (or current) AWS region. */
|
|
52
|
+
export function regionInferencePrefix(region) {
|
|
53
|
+
const r = (region ||
|
|
54
|
+
process.env.AWS_REGION ||
|
|
55
|
+
process.env.AWS_DEFAULT_REGION ||
|
|
56
|
+
'us-east-1').toLowerCase();
|
|
57
|
+
if (r.startsWith('eu-'))
|
|
58
|
+
return 'eu.';
|
|
59
|
+
if (r.startsWith('ap-'))
|
|
60
|
+
return 'apac.';
|
|
61
|
+
return 'us.';
|
|
62
|
+
}
|
|
63
|
+
const CROSS_REGION_PREFIXES = ['us.', 'eu.', 'apac.'];
|
|
64
|
+
/**
|
|
65
|
+
* Re-home a cross-region inference-profile id to the active AWS region.
|
|
66
|
+
*
|
|
67
|
+
* `us.anthropic.claude-...` → `eu.anthropic.claude-...` when running in an
|
|
68
|
+
* EU region, etc. Ids that carry no regional prefix (bare model ids,
|
|
69
|
+
* `global.` profiles, non-Bedrock ids like `mock://` or `gpt-4o`) are
|
|
70
|
+
* returned unchanged.
|
|
71
|
+
*/
|
|
72
|
+
export function resolveRegionAwareModelId(modelId, region) {
|
|
73
|
+
if (!modelId)
|
|
74
|
+
return modelId;
|
|
75
|
+
const target = regionInferencePrefix(region);
|
|
76
|
+
for (const prefix of CROSS_REGION_PREFIXES) {
|
|
77
|
+
if (modelId.startsWith(prefix)) {
|
|
78
|
+
return prefix === target ? modelId : target + modelId.slice(prefix.length);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return modelId;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=bedrockCompat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bedrockCompat.js","sourceRoot":"","sources":["../../bedrockCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;GAGG;AACH,MAAM,+BAA+B,GAAa;IAChD,qBAAqB,EAAE,+BAA+B;IACtD,uBAAuB,EAAE,8CAA8C;IACvE,0BAA0B,EAAE,4DAA4D;CACzF,CAAC;AAEF,+EAA+E;AAC/E,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACzC,OAAO,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAClE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,IAAiD;IAEjD,MAAM,GAAG,GAAgD,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IACvF,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,wBAAwB,CAAC,OAAO,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,qBAAqB,CAAC,MAAe;IACnD,MAAM,CAAC,GAAG,CACR,MAAM;QACN,OAAO,CAAC,GAAG,CAAC,UAAU;QACtB,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAC9B,WAAW,CACZ,CAAC,WAAW,EAAE,CAAC;IAChB,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACxC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAU,CAAC;AAE/D;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAe,EAAE,MAAe;IACxE,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IAC7B,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC7C,KAAK,MAAM,MAAM,IAAI,qBAAqB,EAAE,CAAC;QAC3C,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { TestCase } from '../types/index.js';
|
|
2
|
+
import type { ValidatedTestCaseInput } from '../lib/testCaseValidation.js';
|
|
3
|
+
/**
|
|
4
|
+
* Convert full TestCase objects to the import-compatible export format.
|
|
5
|
+
* The output matches the `testCaseSchema` shape from `lib/testCaseValidation.ts`,
|
|
6
|
+
* ensuring exported JSON can be re-imported via "Import JSON".
|
|
7
|
+
*/
|
|
8
|
+
export declare function convertTestCasesToExportFormat(testCases: TestCase[]): ValidatedTestCaseInput[];
|
|
9
|
+
/**
|
|
10
|
+
* Generate a safe filename from a benchmark name.
|
|
11
|
+
* Sanitizes the name by replacing unsafe characters and appends `.json`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function generateExportFilename(benchmarkName: string): string;
|
|
14
|
+
//# sourceMappingURL=benchmarkExport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmarkExport.d.ts","sourceRoot":"","sources":["../../benchmarkExport.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,sBAAsB,EAAE,CAkB9F;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAUpE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Convert full TestCase objects to the import-compatible export format.
|
|
7
|
+
* The output matches the `testCaseSchema` shape from `lib/testCaseValidation.ts`,
|
|
8
|
+
* ensuring exported JSON can be re-imported via "Import JSON".
|
|
9
|
+
*/
|
|
10
|
+
export function convertTestCasesToExportFormat(testCases) {
|
|
11
|
+
return testCases.map((tc) => {
|
|
12
|
+
const exported = {
|
|
13
|
+
name: tc.name,
|
|
14
|
+
description: tc.description || '',
|
|
15
|
+
category: tc.category,
|
|
16
|
+
difficulty: tc.difficulty,
|
|
17
|
+
initialPrompt: tc.initialPrompt,
|
|
18
|
+
context: tc.context || [],
|
|
19
|
+
expectedOutcomes: tc.expectedOutcomes || [],
|
|
20
|
+
};
|
|
21
|
+
if (tc.subcategory) {
|
|
22
|
+
exported.subcategory = tc.subcategory;
|
|
23
|
+
}
|
|
24
|
+
return exported;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Generate a safe filename from a benchmark name.
|
|
29
|
+
* Sanitizes the name by replacing unsafe characters and appends `.json`.
|
|
30
|
+
*/
|
|
31
|
+
export function generateExportFilename(benchmarkName) {
|
|
32
|
+
const sanitized = (benchmarkName || 'benchmark-export')
|
|
33
|
+
.trim()
|
|
34
|
+
.toLowerCase()
|
|
35
|
+
.replace(/[^a-z0-9_\-\s]/g, '')
|
|
36
|
+
.replace(/\s+/g, '-')
|
|
37
|
+
.replace(/-+/g, '-')
|
|
38
|
+
.replace(/^-|-$/g, '');
|
|
39
|
+
return `${sanitized || 'benchmark-export'}.json`;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=benchmarkExport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmarkExport.js","sourceRoot":"","sources":["../../benchmarkExport.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,SAAqB;IAClE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QAC1B,MAAM,QAAQ,GAA2B;YACvC,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE;YACjC,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,aAAa,EAAE,EAAE,CAAC,aAAa;YAC/B,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE;YACzB,gBAAgB,EAAE,EAAE,CAAC,gBAAgB,IAAI,EAAE;SAC5C,CAAC;QAEF,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACnB,QAAQ,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;QACxC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,aAAqB;IAC1D,MAAM,SAAS,GAAG,CAAC,aAAa,IAAI,kBAAkB,CAAC;SACpD,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;SAC9B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEzB,OAAO,GAAG,SAAS,IAAI,kBAAkB,OAAO,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { BenchmarkImage, TestCase } from '../types/index.js';
|
|
2
|
+
/** Eval conditions frozen into an image digest. */
|
|
3
|
+
export interface ImageEvalConditions {
|
|
4
|
+
evaluatorId?: string;
|
|
5
|
+
judgeModelId?: string;
|
|
6
|
+
}
|
|
7
|
+
/** Bump when the digest input shape changes (invalidates old digests). */
|
|
8
|
+
export declare const IMAGE_DIGEST_VERSION = 1;
|
|
9
|
+
/**
|
|
10
|
+
* Deterministic JSON: objects serialized with sorted keys, recursively.
|
|
11
|
+
* Arrays keep their order (order-sensitivity is decided by the caller).
|
|
12
|
+
*/
|
|
13
|
+
export declare function canonicalStringify(value: unknown): string;
|
|
14
|
+
/**
|
|
15
|
+
* Content fingerprint of a single test case. Uses CONTENT only — never the
|
|
16
|
+
* storage id — so re-imported test cases (fresh ids, same content) fingerprint
|
|
17
|
+
* identically. Fields chosen to match what actually changes agent behavior
|
|
18
|
+
* and judging: prompt, context, expected outcomes/trajectory, tools.
|
|
19
|
+
*/
|
|
20
|
+
export declare function fingerprintTestCase(tc: Partial<TestCase> & {
|
|
21
|
+
name: string;
|
|
22
|
+
}): {
|
|
23
|
+
name: string;
|
|
24
|
+
contentHash: string;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Compute the image digest for a set of test cases + eval conditions.
|
|
28
|
+
* Order-insensitive over test cases (fingerprints are sorted), content- and
|
|
29
|
+
* condition-sensitive.
|
|
30
|
+
*/
|
|
31
|
+
export declare function computeImageDigest(input: {
|
|
32
|
+
testCases: Array<Partial<TestCase> & {
|
|
33
|
+
name: string;
|
|
34
|
+
}>;
|
|
35
|
+
evalConditions?: ImageEvalConditions;
|
|
36
|
+
}): string;
|
|
37
|
+
/** Storage id for an image doc (content-addressed — one doc per digest). */
|
|
38
|
+
export declare function imageIdForDigest(digest: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* Build a full image doc for storage. `create` on the storage side is
|
|
41
|
+
* find-or-create keyed on the digest, so calling this repeatedly for the
|
|
42
|
+
* same inputs is harmless.
|
|
43
|
+
*/
|
|
44
|
+
export declare function buildImageDoc(input: {
|
|
45
|
+
testCases: Array<Partial<TestCase> & {
|
|
46
|
+
id?: string;
|
|
47
|
+
name: string;
|
|
48
|
+
}>;
|
|
49
|
+
evalConditions?: ImageEvalConditions;
|
|
50
|
+
tags?: string[];
|
|
51
|
+
}): BenchmarkImage;
|
|
52
|
+
//# sourceMappingURL=benchmarkImage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmarkImage.d.ts","sourceRoot":"","sources":["../../benchmarkImage.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExD,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,0EAA0E;AAC1E,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEzD;AAmBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAYvC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,cAAc,CAAC,EAAE,mBAAmB,CAAC;CACtC,GAAG,MAAM,CAaT;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,GAAG,cAAc,CAkBjB"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Benchmark images — content-addressed identity for evaluation conditions.
|
|
7
|
+
*
|
|
8
|
+
* An image freezes the "controls" of an evaluation run: the test-case
|
|
9
|
+
* contents and the eval conditions (evaluator, judge model). The digest is a
|
|
10
|
+
* SHA-256 over a canonical serialization, so:
|
|
11
|
+
*
|
|
12
|
+
* - two runs with the same digest are comparable **by construction**
|
|
13
|
+
* (same tests, same judge conditions — only the agent varies);
|
|
14
|
+
* - re-running the same command yields the same digest → the image is
|
|
15
|
+
* found, not re-created (inherent dedup: identity is content, not name).
|
|
16
|
+
*
|
|
17
|
+
* Names are docker-style *tags*: mutable labels pointing at a digest, never
|
|
18
|
+
* identity. See the benchmark-dedup design discussion for rationale.
|
|
19
|
+
*/
|
|
20
|
+
import { createHash } from 'crypto';
|
|
21
|
+
/** Bump when the digest input shape changes (invalidates old digests). */
|
|
22
|
+
export const IMAGE_DIGEST_VERSION = 1;
|
|
23
|
+
/**
|
|
24
|
+
* Deterministic JSON: objects serialized with sorted keys, recursively.
|
|
25
|
+
* Arrays keep their order (order-sensitivity is decided by the caller).
|
|
26
|
+
*/
|
|
27
|
+
export function canonicalStringify(value) {
|
|
28
|
+
return JSON.stringify(sortValue(value));
|
|
29
|
+
}
|
|
30
|
+
function sortValue(value) {
|
|
31
|
+
if (Array.isArray(value))
|
|
32
|
+
return value.map(sortValue);
|
|
33
|
+
if (value && typeof value === 'object') {
|
|
34
|
+
const out = {};
|
|
35
|
+
for (const key of Object.keys(value).sort()) {
|
|
36
|
+
const v = value[key];
|
|
37
|
+
if (v !== undefined)
|
|
38
|
+
out[key] = sortValue(v);
|
|
39
|
+
}
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
function sha256Hex(input) {
|
|
45
|
+
return createHash('sha256').update(input, 'utf8').digest('hex');
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Content fingerprint of a single test case. Uses CONTENT only — never the
|
|
49
|
+
* storage id — so re-imported test cases (fresh ids, same content) fingerprint
|
|
50
|
+
* identically. Fields chosen to match what actually changes agent behavior
|
|
51
|
+
* and judging: prompt, context, expected outcomes/trajectory, tools.
|
|
52
|
+
*/
|
|
53
|
+
export function fingerprintTestCase(tc) {
|
|
54
|
+
const content = {
|
|
55
|
+
name: tc.name,
|
|
56
|
+
initialPrompt: tc.initialPrompt ?? null,
|
|
57
|
+
context: tc.context ?? null,
|
|
58
|
+
tools: tc.tools ?? null,
|
|
59
|
+
expectedOutcomes: tc.expectedOutcomes ?? null,
|
|
60
|
+
expectedTrajectory: tc.expectedTrajectory ?? null,
|
|
61
|
+
// Code-imported cases: sourceHash already fingerprints the executable body.
|
|
62
|
+
sourceHash: tc.sourceHash ?? null,
|
|
63
|
+
};
|
|
64
|
+
return { name: tc.name, contentHash: sha256Hex(canonicalStringify(content)) };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Compute the image digest for a set of test cases + eval conditions.
|
|
68
|
+
* Order-insensitive over test cases (fingerprints are sorted), content- and
|
|
69
|
+
* condition-sensitive.
|
|
70
|
+
*/
|
|
71
|
+
export function computeImageDigest(input) {
|
|
72
|
+
const fingerprints = input.testCases
|
|
73
|
+
.map(fingerprintTestCase)
|
|
74
|
+
.sort((a, b) => a.contentHash.localeCompare(b.contentHash));
|
|
75
|
+
const payload = {
|
|
76
|
+
v: IMAGE_DIGEST_VERSION,
|
|
77
|
+
testCases: fingerprints.map((f) => f.contentHash),
|
|
78
|
+
evalConditions: {
|
|
79
|
+
evaluatorId: input.evalConditions?.evaluatorId ?? null,
|
|
80
|
+
judgeModelId: input.evalConditions?.judgeModelId ?? null,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
return sha256Hex(canonicalStringify(payload));
|
|
84
|
+
}
|
|
85
|
+
/** Storage id for an image doc (content-addressed — one doc per digest). */
|
|
86
|
+
export function imageIdForDigest(digest) {
|
|
87
|
+
return `img-${digest}`;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Build a full image doc for storage. `create` on the storage side is
|
|
91
|
+
* find-or-create keyed on the digest, so calling this repeatedly for the
|
|
92
|
+
* same inputs is harmless.
|
|
93
|
+
*/
|
|
94
|
+
export function buildImageDoc(input) {
|
|
95
|
+
const digest = computeImageDigest(input);
|
|
96
|
+
const fingerprints = input.testCases
|
|
97
|
+
.map((tc) => ({ ...fingerprintTestCase(tc), id: tc.id }))
|
|
98
|
+
.sort((a, b) => a.contentHash.localeCompare(b.contentHash));
|
|
99
|
+
return {
|
|
100
|
+
id: imageIdForDigest(digest),
|
|
101
|
+
docType: 'benchmark-image',
|
|
102
|
+
digest,
|
|
103
|
+
tags: input.tags ?? [],
|
|
104
|
+
testCaseFingerprints: fingerprints,
|
|
105
|
+
testCaseCount: fingerprints.length,
|
|
106
|
+
evalConditions: {
|
|
107
|
+
...(input.evalConditions?.evaluatorId ? { evaluatorId: input.evalConditions.evaluatorId } : {}),
|
|
108
|
+
...(input.evalConditions?.judgeModelId ? { judgeModelId: input.evalConditions.judgeModelId } : {}),
|
|
109
|
+
},
|
|
110
|
+
createdAt: new Date().toISOString(),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=benchmarkImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmarkImage.js","sourceRoot":"","sources":["../../benchmarkImage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { Benchmark, BenchmarkRun, TestCase } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Enhanced version data with diff information
|
|
4
|
+
*/
|
|
5
|
+
export interface VersionData {
|
|
6
|
+
version: number;
|
|
7
|
+
createdAt: string;
|
|
8
|
+
testCaseIds: string[];
|
|
9
|
+
isLatest: boolean;
|
|
10
|
+
added: string[];
|
|
11
|
+
removed: string[];
|
|
12
|
+
runCount: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Compute version data with diff information for a benchmark.
|
|
16
|
+
* Returns versions sorted by version number (newest first) with added/removed test case IDs.
|
|
17
|
+
*/
|
|
18
|
+
export declare function computeVersionData(benchmark: Benchmark | null): VersionData[];
|
|
19
|
+
/**
|
|
20
|
+
* Get version data for a specific version number or the latest version.
|
|
21
|
+
* @param versionData - Array of computed version data
|
|
22
|
+
* @param selectedVersion - Version number to get, or null for latest
|
|
23
|
+
*/
|
|
24
|
+
export declare function getSelectedVersionData(versionData: VersionData[], selectedVersion: number | null): VersionData | null;
|
|
25
|
+
/**
|
|
26
|
+
* Get test cases for a specific version.
|
|
27
|
+
* @param testCases - All available test cases
|
|
28
|
+
* @param selectedVersionData - The version data to get test cases for
|
|
29
|
+
*/
|
|
30
|
+
export declare function getVersionTestCases(testCases: TestCase[], selectedVersionData: VersionData | null): TestCase[];
|
|
31
|
+
/**
|
|
32
|
+
* Filter runs by version.
|
|
33
|
+
* @param runs - All benchmark runs
|
|
34
|
+
* @param versionFilter - Version number to filter by, or 'all' for all runs
|
|
35
|
+
*/
|
|
36
|
+
export declare function filterRunsByVersion(runs: BenchmarkRun[] | undefined, versionFilter: number | 'all'): BenchmarkRun[];
|
|
37
|
+
/**
|
|
38
|
+
* Resolve the effective run-version filter from a persisted (possibly stale)
|
|
39
|
+
* value. A persisted version the benchmark doesn't actually have — e.g. a
|
|
40
|
+
* filter set while viewing a different benchmark under the old global
|
|
41
|
+
* localStorage key, a deleted version, or corrupted storage — must behave as
|
|
42
|
+
* 'all' rather than filtering every run out and rendering a bogus
|
|
43
|
+
* "No runs for vN" empty state that looks like data loss.
|
|
44
|
+
*
|
|
45
|
+
* @param raw - persisted filter value
|
|
46
|
+
* @param availableVersions - the benchmark's actual version numbers
|
|
47
|
+
* (undefined while the benchmark is still loading — value passes through)
|
|
48
|
+
*/
|
|
49
|
+
export declare function effectiveRunVersionFilter(raw: number | 'all', availableVersions: number[] | undefined): number | 'all';
|
|
50
|
+
//# sourceMappingURL=benchmarkVersionUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmarkVersionUtils.d.ts","sourceRoot":"","sources":["../../benchmarkVersionUtils.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAoB,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,WAAW,EAAE,CA0B7E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,WAAW,EAAE,EAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,GAC7B,WAAW,GAAG,IAAI,CAIpB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,QAAQ,EAAE,EACrB,mBAAmB,EAAE,WAAW,GAAG,IAAI,GACtC,QAAQ,EAAE,CAKZ;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,YAAY,EAAE,GAAG,SAAS,EAChC,aAAa,EAAE,MAAM,GAAG,KAAK,GAC5B,YAAY,EAAE,CAShB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,GAAG,KAAK,EACnB,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,GACtC,MAAM,GAAG,KAAK,CAKhB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Compute version data with diff information for a benchmark.
|
|
7
|
+
* Returns versions sorted by version number (newest first) with added/removed test case IDs.
|
|
8
|
+
*/
|
|
9
|
+
export function computeVersionData(benchmark) {
|
|
10
|
+
if (!benchmark?.versions || benchmark.versions.length === 0)
|
|
11
|
+
return [];
|
|
12
|
+
return benchmark.versions
|
|
13
|
+
.slice() // Create a copy to avoid mutating original
|
|
14
|
+
.sort((a, b) => b.version - a.version) // Newest first
|
|
15
|
+
.map((v, index, arr) => {
|
|
16
|
+
const prevVersion = arr[index + 1]; // Previous version (older)
|
|
17
|
+
const added = prevVersion
|
|
18
|
+
? v.testCaseIds.filter(id => !prevVersion.testCaseIds.includes(id))
|
|
19
|
+
: [];
|
|
20
|
+
const removed = prevVersion
|
|
21
|
+
? prevVersion.testCaseIds.filter(id => !v.testCaseIds.includes(id))
|
|
22
|
+
: [];
|
|
23
|
+
const runCount = benchmark.runs?.filter(r => (r.benchmarkVersion || 1) === v.version).length || 0;
|
|
24
|
+
return {
|
|
25
|
+
...v,
|
|
26
|
+
isLatest: index === 0,
|
|
27
|
+
added,
|
|
28
|
+
removed,
|
|
29
|
+
runCount,
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get version data for a specific version number or the latest version.
|
|
35
|
+
* @param versionData - Array of computed version data
|
|
36
|
+
* @param selectedVersion - Version number to get, or null for latest
|
|
37
|
+
*/
|
|
38
|
+
export function getSelectedVersionData(versionData, selectedVersion) {
|
|
39
|
+
if (versionData.length === 0)
|
|
40
|
+
return null;
|
|
41
|
+
if (selectedVersion === null)
|
|
42
|
+
return versionData[0]; // Latest
|
|
43
|
+
return versionData.find(v => v.version === selectedVersion) || versionData[0];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get test cases for a specific version.
|
|
47
|
+
* @param testCases - All available test cases
|
|
48
|
+
* @param selectedVersionData - The version data to get test cases for
|
|
49
|
+
*/
|
|
50
|
+
export function getVersionTestCases(testCases, selectedVersionData) {
|
|
51
|
+
if (!selectedVersionData)
|
|
52
|
+
return [];
|
|
53
|
+
return testCases.filter(tc => selectedVersionData.testCaseIds.includes(tc.id));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Filter runs by version.
|
|
57
|
+
* @param runs - All benchmark runs
|
|
58
|
+
* @param versionFilter - Version number to filter by, or 'all' for all runs
|
|
59
|
+
*/
|
|
60
|
+
export function filterRunsByVersion(runs, versionFilter) {
|
|
61
|
+
if (!runs)
|
|
62
|
+
return [];
|
|
63
|
+
const sorted = [...runs].sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
|
|
64
|
+
if (versionFilter === 'all')
|
|
65
|
+
return sorted;
|
|
66
|
+
return sorted.filter(run => (run.benchmarkVersion || 1) === versionFilter);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Resolve the effective run-version filter from a persisted (possibly stale)
|
|
70
|
+
* value. A persisted version the benchmark doesn't actually have — e.g. a
|
|
71
|
+
* filter set while viewing a different benchmark under the old global
|
|
72
|
+
* localStorage key, a deleted version, or corrupted storage — must behave as
|
|
73
|
+
* 'all' rather than filtering every run out and rendering a bogus
|
|
74
|
+
* "No runs for vN" empty state that looks like data loss.
|
|
75
|
+
*
|
|
76
|
+
* @param raw - persisted filter value
|
|
77
|
+
* @param availableVersions - the benchmark's actual version numbers
|
|
78
|
+
* (undefined while the benchmark is still loading — value passes through)
|
|
79
|
+
*/
|
|
80
|
+
export function effectiveRunVersionFilter(raw, availableVersions) {
|
|
81
|
+
if (raw === 'all')
|
|
82
|
+
return 'all';
|
|
83
|
+
if (!Number.isInteger(raw) || raw < 1)
|
|
84
|
+
return 'all';
|
|
85
|
+
if (availableVersions !== undefined && !availableVersions.includes(raw))
|
|
86
|
+
return 'all';
|
|
87
|
+
return raw;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=benchmarkVersionUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmarkVersionUtils.js","sourceRoot":"","sources":["../../benchmarkVersionUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared "fetch a big id list without blowing up the request" policy.
|
|
3
|
+
*
|
|
4
|
+
* A comparison over a large multi-run pool can need results for hundreds of
|
|
5
|
+
* ids (report ids, test-case ids, …) in one go. Two failure modes to avoid:
|
|
6
|
+
* - one unbounded `?ids=<all>` GET can blow past practical URL/header size
|
|
7
|
+
* limits (HTTP 431 — see asyncRunStorage.getReportsByIds's history);
|
|
8
|
+
* - firing one request per chunk with no cap can stampede the backend.
|
|
9
|
+
*
|
|
10
|
+
* `fetchChunked` splits `ids` into bounded chunks and fans them out with a
|
|
11
|
+
* capped worker pool — never one unbounded request, never an unbounded burst
|
|
12
|
+
* of parallel ones either. Used by asyncRunStorage (report ids) and
|
|
13
|
+
* asyncTestCaseStorage (test-case ids).
|
|
14
|
+
*/
|
|
15
|
+
export declare const DEFAULT_CHUNK_SIZE = 100;
|
|
16
|
+
export declare const DEFAULT_MAX_CONCURRENT_CHUNKS = 8;
|
|
17
|
+
export declare function fetchChunked<T>(ids: string[], chunkSize: number, fetchChunk: (chunk: string[]) => Promise<T[]>, maxConcurrentChunks?: number): Promise<T[]>;
|
|
18
|
+
//# sourceMappingURL=chunkedFetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunkedFetch.d.ts","sourceRoot":"","sources":["../../chunkedFetch.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C,wBAAsB,YAAY,CAAC,CAAC,EAClC,GAAG,EAAE,MAAM,EAAE,EACb,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,EAC7C,mBAAmB,GAAE,MAAsC,GAC1D,OAAO,CAAC,CAAC,EAAE,CAAC,CAiBd"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Shared "fetch a big id list without blowing up the request" policy.
|
|
7
|
+
*
|
|
8
|
+
* A comparison over a large multi-run pool can need results for hundreds of
|
|
9
|
+
* ids (report ids, test-case ids, …) in one go. Two failure modes to avoid:
|
|
10
|
+
* - one unbounded `?ids=<all>` GET can blow past practical URL/header size
|
|
11
|
+
* limits (HTTP 431 — see asyncRunStorage.getReportsByIds's history);
|
|
12
|
+
* - firing one request per chunk with no cap can stampede the backend.
|
|
13
|
+
*
|
|
14
|
+
* `fetchChunked` splits `ids` into bounded chunks and fans them out with a
|
|
15
|
+
* capped worker pool — never one unbounded request, never an unbounded burst
|
|
16
|
+
* of parallel ones either. Used by asyncRunStorage (report ids) and
|
|
17
|
+
* asyncTestCaseStorage (test-case ids).
|
|
18
|
+
*/
|
|
19
|
+
export const DEFAULT_CHUNK_SIZE = 100;
|
|
20
|
+
export const DEFAULT_MAX_CONCURRENT_CHUNKS = 8;
|
|
21
|
+
export async function fetchChunked(ids, chunkSize, fetchChunk, maxConcurrentChunks = DEFAULT_MAX_CONCURRENT_CHUNKS) {
|
|
22
|
+
const chunks = [];
|
|
23
|
+
for (let i = 0; i < ids.length; i += chunkSize) {
|
|
24
|
+
chunks.push(ids.slice(i, i + chunkSize));
|
|
25
|
+
}
|
|
26
|
+
const results = new Array(chunks.length);
|
|
27
|
+
let nextChunk = 0;
|
|
28
|
+
async function worker() {
|
|
29
|
+
while (true) {
|
|
30
|
+
const i = nextChunk++;
|
|
31
|
+
if (i >= chunks.length)
|
|
32
|
+
return;
|
|
33
|
+
results[i] = await fetchChunk(chunks[i]);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const workerCount = Math.min(maxConcurrentChunks, chunks.length);
|
|
37
|
+
await Promise.all(Array.from({ length: workerCount }, () => worker()));
|
|
38
|
+
return results.flat();
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=chunkedFetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunkedFetch.js","sourceRoot":"","sources":["../../chunkedFetch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAa,EACb,SAAiB,EACjB,UAA6C,EAC7C,sBAA8B,6BAA6B;IAE3D,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,OAAO,GAAU,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,UAAU,MAAM;QACnB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM;gBAAE,OAAO;YAC/B,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvE,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,CAAC"}
|