@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,254 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* OTel span helpers for evaluation telemetry.
|
|
7
|
+
*
|
|
8
|
+
* Creates and manages spans for benchmark execution following
|
|
9
|
+
* OpenTelemetry semantic conventions for test suites and GenAI evaluation.
|
|
10
|
+
*
|
|
11
|
+
* Span structure:
|
|
12
|
+
* test_suite_run {benchmarkName} ← root span (1 per benchmark run)
|
|
13
|
+
* └── test_case ← child span (1 per test case)
|
|
14
|
+
* └── Event: gen_ai.evaluation.result
|
|
15
|
+
*/
|
|
16
|
+
import { context, trace, TraceFlags, SpanKind, SpanStatusCode, } from '@opentelemetry/api';
|
|
17
|
+
import { getEvalTracer, isEvalTelemetryEnabled, flushEvalTracer } from './provider.js';
|
|
18
|
+
import {
|
|
19
|
+
// In-spec attributes
|
|
20
|
+
ATTR_TEST_SUITE_NAME, ATTR_TEST_SUITE_RUN_STATUS, ATTR_TEST_CASE_NAME, ATTR_TEST_CASE_RESULT_STATUS, ATTR_GEN_AI_OPERATION_NAME, ATTR_GEN_AI_EVALUATION_NAME, ATTR_GEN_AI_CONVERSATION_ID, ATTR_GEN_AI_EVALUATION_SCORE_VALUE, ATTR_GEN_AI_EVALUATION_SCORE_LABEL, ATTR_GEN_AI_EVALUATION_EXPLANATION, EVENT_GEN_AI_EVALUATION_RESULT, TEST_SUITE_RUN_STATUS_VALUE_SUCCESS, TEST_SUITE_RUN_STATUS_VALUE_FAILURE, TEST_CASE_RESULT_STATUS_VALUE_PASS, TEST_CASE_RESULT_STATUS_VALUE_FAIL,
|
|
21
|
+
// Proposed attributes (#3398)
|
|
22
|
+
ATTR_TEST_SUITE_RUN_ID, ATTR_TEST_CASE_ID,
|
|
23
|
+
// IO attributes
|
|
24
|
+
ATTR_TEST_CASE_INPUT, ATTR_TEST_CASE_OUTPUT, ATTR_TEST_CASE_EXPECTED,
|
|
25
|
+
// Agent Health extensions
|
|
26
|
+
ATTR_AGENT_HEALTH_JUDGE_MODEL_ID, ATTR_AGENT_HEALTH_JUDGE_DURATION_MS, ATTR_AGENT_HEALTH_JUDGE_ATTEMPTS, ATTR_AGENT_HEALTH_AGENT_DURATION_MS, ATTR_AGENT_HEALTH_CONNECTOR_PROTOCOL, ATTR_AGENT_HEALTH_AGENT_RUN_ID,
|
|
27
|
+
// Constants
|
|
28
|
+
GEN_AI_OPERATION_NAME_VALUE_EVALUATION, MAX_ATTRIBUTE_LENGTH, MAX_EXPLANATION_LENGTH, } from './constants.js';
|
|
29
|
+
/**
|
|
30
|
+
* Truncate a string to the given max length
|
|
31
|
+
*/
|
|
32
|
+
function truncate(value, maxLength) {
|
|
33
|
+
if (!value)
|
|
34
|
+
return undefined;
|
|
35
|
+
return value.length > maxLength ? value.slice(0, maxLength) + '...' : value;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Extract the agent's final response from a trajectory
|
|
39
|
+
*/
|
|
40
|
+
function extractAgentResponse(report) {
|
|
41
|
+
const responseStep = [...report.trajectory].reverse().find(s => s.type === 'response' || s.type === 'assistant');
|
|
42
|
+
return responseStep?.content;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Start a test_suite_run root span for a benchmark run.
|
|
46
|
+
*
|
|
47
|
+
* Returns the span and a context carrying it for child span creation.
|
|
48
|
+
* The caller MUST call finalizeTestSuiteRunSpan() when the run completes.
|
|
49
|
+
*/
|
|
50
|
+
export function startTestSuiteRunSpan(benchmark, run) {
|
|
51
|
+
if (!isEvalTelemetryEnabled())
|
|
52
|
+
return null;
|
|
53
|
+
const tracer = getEvalTracer();
|
|
54
|
+
const span = tracer.startSpan(`test_suite_run ${benchmark.name}`, {
|
|
55
|
+
kind: SpanKind.INTERNAL,
|
|
56
|
+
attributes: {
|
|
57
|
+
[ATTR_TEST_SUITE_NAME]: benchmark.name,
|
|
58
|
+
[ATTR_TEST_SUITE_RUN_ID]: run.id,
|
|
59
|
+
[ATTR_GEN_AI_OPERATION_NAME]: GEN_AI_OPERATION_NAME_VALUE_EVALUATION,
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
const ctx = context.active();
|
|
63
|
+
const spanContext = trace.setSpan(ctx, span);
|
|
64
|
+
console.log(`[Telemetry] Started test_suite_run span for "${benchmark.name}" (runId=${run.id})`);
|
|
65
|
+
return { span, context: spanContext };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Start a test_case child span for a single test case evaluation.
|
|
69
|
+
*
|
|
70
|
+
* @param parentCtx - Context from the parent test_suite_run span
|
|
71
|
+
* @param testCase - The test case being evaluated
|
|
72
|
+
* @param benchmark - Parent benchmark (for name duplication)
|
|
73
|
+
* @param run - Parent benchmark run (for run ID duplication)
|
|
74
|
+
* @param agentRunId - Optional agent execution run ID (links eval span to agent traces)
|
|
75
|
+
* @param links - Optional span links (e.g., to agent execution trace)
|
|
76
|
+
*/
|
|
77
|
+
export function startTestCaseSpan(parentCtx, testCase, benchmark, run, agentRunId, links) {
|
|
78
|
+
if (!isEvalTelemetryEnabled())
|
|
79
|
+
return null;
|
|
80
|
+
const tracer = getEvalTracer();
|
|
81
|
+
const attributes = {
|
|
82
|
+
[ATTR_TEST_SUITE_NAME]: benchmark.name,
|
|
83
|
+
[ATTR_TEST_SUITE_RUN_ID]: run.id,
|
|
84
|
+
[ATTR_TEST_CASE_ID]: testCase.id,
|
|
85
|
+
[ATTR_TEST_CASE_NAME]: testCase.name,
|
|
86
|
+
[ATTR_GEN_AI_OPERATION_NAME]: GEN_AI_OPERATION_NAME_VALUE_EVALUATION,
|
|
87
|
+
};
|
|
88
|
+
if (agentRunId) {
|
|
89
|
+
attributes[ATTR_AGENT_HEALTH_AGENT_RUN_ID] = agentRunId;
|
|
90
|
+
// OTEL-standard correlation id (incubating). Set to the same agent run id
|
|
91
|
+
// so trace queries correlating on `gen_ai.conversation.id` find this eval
|
|
92
|
+
// span alongside `agent_health.run.id` (Strategy B).
|
|
93
|
+
attributes[ATTR_GEN_AI_CONVERSATION_ID] = agentRunId;
|
|
94
|
+
}
|
|
95
|
+
attributes[ATTR_TEST_CASE_INPUT] = truncate(testCase.initialPrompt || '', MAX_ATTRIBUTE_LENGTH);
|
|
96
|
+
const expected = truncate(testCase.expectedOutcomes ? JSON.stringify(testCase.expectedOutcomes) : undefined, MAX_ATTRIBUTE_LENGTH);
|
|
97
|
+
if (expected)
|
|
98
|
+
attributes[ATTR_TEST_CASE_EXPECTED] = expected;
|
|
99
|
+
const span = tracer.startSpan('test_case', {
|
|
100
|
+
kind: SpanKind.INTERNAL,
|
|
101
|
+
attributes,
|
|
102
|
+
links,
|
|
103
|
+
}, parentCtx);
|
|
104
|
+
const ctx = trace.setSpan(parentCtx, span);
|
|
105
|
+
console.log(`[Telemetry] Started test_case span for "${testCase.name}" (agentRunId=${agentRunId || 'none'})`);
|
|
106
|
+
return { span, context: ctx };
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Add gen_ai.evaluation.result events to a test case span.
|
|
110
|
+
*
|
|
111
|
+
* Emits one event per metric (currently: accuracy with pass/fail label).
|
|
112
|
+
*/
|
|
113
|
+
export function addEvaluationResultEvents(span, report) {
|
|
114
|
+
if (!isEvalTelemetryEnabled())
|
|
115
|
+
return;
|
|
116
|
+
// Primary metric: accuracy
|
|
117
|
+
if (report.metrics?.accuracy !== undefined) {
|
|
118
|
+
span.addEvent(EVENT_GEN_AI_EVALUATION_RESULT, {
|
|
119
|
+
[ATTR_GEN_AI_EVALUATION_NAME]: 'accuracy',
|
|
120
|
+
[ATTR_GEN_AI_EVALUATION_SCORE_VALUE]: report.metrics.accuracy,
|
|
121
|
+
[ATTR_GEN_AI_EVALUATION_SCORE_LABEL]: report.passFailStatus === 'passed' ? 'pass' : 'fail',
|
|
122
|
+
[ATTR_GEN_AI_EVALUATION_EXPLANATION]: truncate(report.llmJudgeReasoning, MAX_EXPLANATION_LENGTH),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
// Additional metrics (faithfulness, latency_score, trajectory_alignment_score)
|
|
126
|
+
if (report.metrics?.faithfulness !== undefined) {
|
|
127
|
+
span.addEvent(EVENT_GEN_AI_EVALUATION_RESULT, {
|
|
128
|
+
[ATTR_GEN_AI_EVALUATION_NAME]: 'faithfulness',
|
|
129
|
+
[ATTR_GEN_AI_EVALUATION_SCORE_VALUE]: report.metrics.faithfulness,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
if (report.metrics?.latency_score !== undefined) {
|
|
133
|
+
span.addEvent(EVENT_GEN_AI_EVALUATION_RESULT, {
|
|
134
|
+
[ATTR_GEN_AI_EVALUATION_NAME]: 'latency_score',
|
|
135
|
+
[ATTR_GEN_AI_EVALUATION_SCORE_VALUE]: report.metrics.latency_score,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
if (report.metrics?.trajectory_alignment_score !== undefined) {
|
|
139
|
+
span.addEvent(EVENT_GEN_AI_EVALUATION_RESULT, {
|
|
140
|
+
[ATTR_GEN_AI_EVALUATION_NAME]: 'trajectory_alignment_score',
|
|
141
|
+
[ATTR_GEN_AI_EVALUATION_SCORE_VALUE]: report.metrics.trajectory_alignment_score,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Finalize a test case span with evaluation results and end it.
|
|
147
|
+
*/
|
|
148
|
+
export function finalizeTestCaseSpan(span, report, endTime) {
|
|
149
|
+
if (!isEvalTelemetryEnabled())
|
|
150
|
+
return;
|
|
151
|
+
// Set result status
|
|
152
|
+
const status = report.passFailStatus === 'passed'
|
|
153
|
+
? TEST_CASE_RESULT_STATUS_VALUE_PASS
|
|
154
|
+
: TEST_CASE_RESULT_STATUS_VALUE_FAIL;
|
|
155
|
+
span.setAttribute(ATTR_TEST_CASE_RESULT_STATUS, status);
|
|
156
|
+
// Set output (agent's final response) — always set so UI can distinguish missing vs empty
|
|
157
|
+
const output = extractAgentResponse(report) || '';
|
|
158
|
+
span.setAttribute(ATTR_TEST_CASE_OUTPUT, truncate(output, MAX_ATTRIBUTE_LENGTH));
|
|
159
|
+
// Set Agent Health extension attributes
|
|
160
|
+
if (report.connectorProtocol) {
|
|
161
|
+
span.setAttribute(ATTR_AGENT_HEALTH_CONNECTOR_PROTOCOL, report.connectorProtocol);
|
|
162
|
+
}
|
|
163
|
+
if (report.performanceMetrics?.agentDurationMs !== undefined) {
|
|
164
|
+
span.setAttribute(ATTR_AGENT_HEALTH_AGENT_DURATION_MS, report.performanceMetrics.agentDurationMs);
|
|
165
|
+
}
|
|
166
|
+
if (report.performanceMetrics?.judgeDurationMs !== undefined) {
|
|
167
|
+
span.setAttribute(ATTR_AGENT_HEALTH_JUDGE_DURATION_MS, report.performanceMetrics.judgeDurationMs);
|
|
168
|
+
}
|
|
169
|
+
if (report.performanceMetrics?.judgeAttempts !== undefined) {
|
|
170
|
+
span.setAttribute(ATTR_AGENT_HEALTH_JUDGE_ATTEMPTS, report.performanceMetrics.judgeAttempts);
|
|
171
|
+
}
|
|
172
|
+
if (report.llmJudgeResponse?.modelId) {
|
|
173
|
+
span.setAttribute(ATTR_AGENT_HEALTH_JUDGE_MODEL_ID, report.llmJudgeResponse.modelId);
|
|
174
|
+
}
|
|
175
|
+
// Set span status based on evaluation outcome
|
|
176
|
+
if (report.status === 'failed') {
|
|
177
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: 'Evaluation failed' });
|
|
178
|
+
}
|
|
179
|
+
span.end(endTime);
|
|
180
|
+
console.log(`[Telemetry] Finalized test_case span (status=${status}, passFailStatus=${report.passFailStatus})`);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Finalize a test_suite_run span and end it.
|
|
184
|
+
*/
|
|
185
|
+
export function finalizeTestSuiteRunSpan(span, run) {
|
|
186
|
+
if (!isEvalTelemetryEnabled())
|
|
187
|
+
return;
|
|
188
|
+
// Compute overall status from results
|
|
189
|
+
const results = Object.values(run.results);
|
|
190
|
+
const hasFailures = results.some(r => r.status === 'failed');
|
|
191
|
+
const status = hasFailures
|
|
192
|
+
? TEST_SUITE_RUN_STATUS_VALUE_FAILURE
|
|
193
|
+
: TEST_SUITE_RUN_STATUS_VALUE_SUCCESS;
|
|
194
|
+
span.setAttribute(ATTR_TEST_SUITE_RUN_STATUS, status);
|
|
195
|
+
if (hasFailures) {
|
|
196
|
+
const failCount = results.filter(r => r.status === 'failed').length;
|
|
197
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: `${failCount} case(s) failed` });
|
|
198
|
+
}
|
|
199
|
+
span.end();
|
|
200
|
+
console.log(`[Telemetry] Finalized test_suite_run span (status=${status}), flushing...`);
|
|
201
|
+
flushEvalTracer().catch(() => { });
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Emit a complete test case span for a deferred (trace-mode) evaluation.
|
|
205
|
+
*
|
|
206
|
+
* Used when the judge runs asynchronously after trace polling completes.
|
|
207
|
+
* Creates a standalone span with explicit timestamps reflecting the original execution.
|
|
208
|
+
*/
|
|
209
|
+
export function emitDeferredTestCaseSpan(testCase, report, benchmark, runId, agentRunId, startTime, endTime, agentTraceId) {
|
|
210
|
+
if (!isEvalTelemetryEnabled())
|
|
211
|
+
return;
|
|
212
|
+
const tracer = getEvalTracer();
|
|
213
|
+
const attributes = {
|
|
214
|
+
[ATTR_TEST_SUITE_NAME]: benchmark.name,
|
|
215
|
+
[ATTR_TEST_SUITE_RUN_ID]: runId,
|
|
216
|
+
[ATTR_TEST_CASE_ID]: testCase.id,
|
|
217
|
+
[ATTR_TEST_CASE_NAME]: testCase.name,
|
|
218
|
+
[ATTR_GEN_AI_OPERATION_NAME]: GEN_AI_OPERATION_NAME_VALUE_EVALUATION,
|
|
219
|
+
};
|
|
220
|
+
if (agentRunId) {
|
|
221
|
+
attributes[ATTR_AGENT_HEALTH_AGENT_RUN_ID] = agentRunId;
|
|
222
|
+
attributes[ATTR_GEN_AI_CONVERSATION_ID] = agentRunId;
|
|
223
|
+
}
|
|
224
|
+
attributes[ATTR_TEST_CASE_INPUT] = truncate(testCase.initialPrompt || '', MAX_ATTRIBUTE_LENGTH);
|
|
225
|
+
const expected = truncate(testCase.expectedOutcomes ? JSON.stringify(testCase.expectedOutcomes) : undefined, MAX_ATTRIBUTE_LENGTH);
|
|
226
|
+
if (expected)
|
|
227
|
+
attributes[ATTR_TEST_CASE_EXPECTED] = expected;
|
|
228
|
+
// If an agent traceId is provided, create the span within the same trace
|
|
229
|
+
// so it appears as a sibling of the agent's root span in the trace tree.
|
|
230
|
+
let parentCtx;
|
|
231
|
+
if (agentTraceId && /^[0-9a-f]{32}$/i.test(agentTraceId)) {
|
|
232
|
+
const remoteSpanContext = {
|
|
233
|
+
traceId: agentTraceId,
|
|
234
|
+
// Use a valid synthetic spanId — an all-zero spanId is considered invalid
|
|
235
|
+
// by the OTel SDK and would cause it to ignore this context entirely.
|
|
236
|
+
// This "remote" context carries the traceId forward so the eval span
|
|
237
|
+
// shares the same trace as the agent spans.
|
|
238
|
+
spanId: 'eeee000000000001',
|
|
239
|
+
traceFlags: TraceFlags.SAMPLED,
|
|
240
|
+
isRemote: true,
|
|
241
|
+
};
|
|
242
|
+
parentCtx = trace.setSpanContext(context.active(), remoteSpanContext);
|
|
243
|
+
}
|
|
244
|
+
const span = tracer.startSpan('test_case', {
|
|
245
|
+
kind: SpanKind.INTERNAL,
|
|
246
|
+
startTime,
|
|
247
|
+
attributes,
|
|
248
|
+
}, parentCtx);
|
|
249
|
+
addEvaluationResultEvents(span, report);
|
|
250
|
+
finalizeTestCaseSpan(span, report, endTime);
|
|
251
|
+
console.log(`[Telemetry] Emitted deferred test_case span for "${testCase.name}" (agentRunId=${agentRunId || 'none'}, traceId=${agentTraceId || 'new'}), flushing...`);
|
|
252
|
+
flushEvalTracer().catch(() => { });
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=evalSpans.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evalSpans.js","sourceRoot":"","sources":["../../../telemetry/evalSpans.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evaluation Telemetry Module
|
|
3
|
+
*
|
|
4
|
+
* Emits OTel spans for benchmark evaluation data using semantic conventions.
|
|
5
|
+
* Disabled by default — enable via OTEL_EVAL_ENABLED=true or config file.
|
|
6
|
+
*/
|
|
7
|
+
export { initEvalTracerProvider, getEvalTracer, isEvalTelemetryEnabled, flushEvalTracer, shutdownEvalTracer, resolveEvalTelemetryConfig, type EvalTelemetryConfig, } from './provider.js';
|
|
8
|
+
export { startTestSuiteRunSpan, startTestCaseSpan, addEvaluationResultEvents, finalizeTestCaseSpan, finalizeTestSuiteRunSpan, emitDeferredTestCaseSpan, } from './evalSpans.js';
|
|
9
|
+
export * from './constants.js';
|
|
10
|
+
export { OpenSearchSpanExporter, type OpenSearchExporterConfig, } from './opensearchExporter.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../telemetry/index.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AAEH,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,KAAK,mBAAmB,GACzB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAExB,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EACtB,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Evaluation Telemetry Module
|
|
7
|
+
*
|
|
8
|
+
* Emits OTel spans for benchmark evaluation data using semantic conventions.
|
|
9
|
+
* Disabled by default — enable via OTEL_EVAL_ENABLED=true or config file.
|
|
10
|
+
*/
|
|
11
|
+
export { initEvalTracerProvider, getEvalTracer, isEvalTelemetryEnabled, flushEvalTracer, shutdownEvalTracer, resolveEvalTelemetryConfig, } from './provider.js';
|
|
12
|
+
export { startTestSuiteRunSpan, startTestCaseSpan, addEvaluationResultEvents, finalizeTestCaseSpan, finalizeTestSuiteRunSpan, emitDeferredTestCaseSpan, } from './evalSpans.js';
|
|
13
|
+
export * from './constants.js';
|
|
14
|
+
export { OpenSearchSpanExporter, } from './opensearchExporter.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../telemetry/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,0BAA0B,GAE3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAExB,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EACL,sBAAsB,GAEvB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom OpenSearch Span Exporter
|
|
3
|
+
*
|
|
4
|
+
* Writes OTel spans directly to an OpenSearch cluster using the same
|
|
5
|
+
* observability data source config that the trace reader uses.
|
|
6
|
+
* Formats spans in the OTEL-faithful Data Prepper `trace-analytics-plain-raw`
|
|
7
|
+
* schema (a nested `attributes` object keyed by literal dotted OTel names)
|
|
8
|
+
* so they co-exist with agent spans already in the otel-v1-apm-span-* index.
|
|
9
|
+
*/
|
|
10
|
+
import { SpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-node';
|
|
11
|
+
import { ExportResult } from '@opentelemetry/core';
|
|
12
|
+
/**
|
|
13
|
+
* Configuration for the OpenSearch exporter
|
|
14
|
+
*/
|
|
15
|
+
export interface OpenSearchExporterConfig {
|
|
16
|
+
/** OpenSearch endpoint URL */
|
|
17
|
+
endpoint: string;
|
|
18
|
+
/** Basic auth username */
|
|
19
|
+
username?: string;
|
|
20
|
+
/** Basic auth password */
|
|
21
|
+
password?: string;
|
|
22
|
+
/** Index pattern to write to (default: otel-v1-apm-span-000001) */
|
|
23
|
+
indexName?: string;
|
|
24
|
+
/** Whether to skip TLS verification */
|
|
25
|
+
tlsSkipVerify?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Custom SpanExporter that writes directly to OpenSearch.
|
|
29
|
+
*
|
|
30
|
+
* Formats spans in OSIS-compatible format so eval spans co-exist
|
|
31
|
+
* with agent spans in the same otel-v1-apm-span-* indices.
|
|
32
|
+
*/
|
|
33
|
+
export declare class OpenSearchSpanExporter implements SpanExporter {
|
|
34
|
+
private client;
|
|
35
|
+
private indexName;
|
|
36
|
+
private shutdownRequested;
|
|
37
|
+
constructor(config: OpenSearchExporterConfig);
|
|
38
|
+
export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void;
|
|
39
|
+
private _export;
|
|
40
|
+
shutdown(): Promise<void>;
|
|
41
|
+
forceFlush(): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=opensearchExporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opensearchExporter.d.ts","sourceRoot":"","sources":["../../../telemetry/opensearchExporter.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAoB,MAAM,qBAAqB,CAAC;AAIrE;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AA6JD;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,YAAY;IACzD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,iBAAiB,CAAS;gBAEtB,MAAM,EAAE,wBAAwB;IAiB5C,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;YAcrE,OAAO;IA0Bf,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { ExportResultCode } from '@opentelemetry/core';
|
|
6
|
+
import { SpanKind, SpanStatusCode } from '@opentelemetry/api';
|
|
7
|
+
import { Client } from '@opensearch-project/opensearch';
|
|
8
|
+
/**
|
|
9
|
+
* Convert OTel HrTime [seconds, nanoseconds] to ISO date string
|
|
10
|
+
*/
|
|
11
|
+
function hrTimeToDate(hrTime) {
|
|
12
|
+
const ms = hrTime[0] * 1000 + hrTime[1] / 1_000_000;
|
|
13
|
+
return new Date(ms).toISOString();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Convert OTel HrTime to nanoseconds
|
|
17
|
+
*/
|
|
18
|
+
function hrTimeToNanos(hrTime) {
|
|
19
|
+
return hrTime[0] * 1_000_000_000 + hrTime[1];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Convert duration between two HrTimes to nanoseconds
|
|
23
|
+
*/
|
|
24
|
+
function durationNanos(start, end) {
|
|
25
|
+
return hrTimeToNanos(end) - hrTimeToNanos(start);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Map OTel SpanKind to OSIS string format
|
|
29
|
+
*/
|
|
30
|
+
function spanKindToString(kind) {
|
|
31
|
+
switch (kind) {
|
|
32
|
+
case SpanKind.INTERNAL: return 'SPAN_KIND_INTERNAL';
|
|
33
|
+
case SpanKind.SERVER: return 'SPAN_KIND_SERVER';
|
|
34
|
+
case SpanKind.CLIENT: return 'SPAN_KIND_CLIENT';
|
|
35
|
+
case SpanKind.PRODUCER: return 'SPAN_KIND_PRODUCER';
|
|
36
|
+
case SpanKind.CONSUMER: return 'SPAN_KIND_CONSUMER';
|
|
37
|
+
default: return 'SPAN_KIND_INTERNAL';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Map OTel SpanStatusCode to OSIS integer
|
|
42
|
+
*/
|
|
43
|
+
function statusCodeToInt(code) {
|
|
44
|
+
switch (code) {
|
|
45
|
+
case SpanStatusCode.UNSET: return 0;
|
|
46
|
+
case SpanStatusCode.OK: return 1;
|
|
47
|
+
case SpanStatusCode.ERROR: return 2;
|
|
48
|
+
default: return 0;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Convert a ReadableSpan to an OSIS-compatible OpenSearch document
|
|
53
|
+
*/
|
|
54
|
+
function spanToDocument(span) {
|
|
55
|
+
const doc = {
|
|
56
|
+
traceId: span.spanContext().traceId,
|
|
57
|
+
spanId: span.spanContext().spanId,
|
|
58
|
+
parentSpanId: (span.parentSpanContext?.spanId && span.parentSpanContext.spanId !== '0000000000000000')
|
|
59
|
+
? span.parentSpanContext.spanId : '',
|
|
60
|
+
name: span.name,
|
|
61
|
+
kind: spanKindToString(span.kind),
|
|
62
|
+
startTime: hrTimeToDate(span.startTime),
|
|
63
|
+
endTime: hrTimeToDate(span.endTime),
|
|
64
|
+
durationInNanos: durationNanos(span.startTime, span.endTime),
|
|
65
|
+
status: {
|
|
66
|
+
code: statusCodeToInt(span.status.code),
|
|
67
|
+
message: span.status.message || '',
|
|
68
|
+
},
|
|
69
|
+
traceState: '',
|
|
70
|
+
droppedAttributesCount: span.droppedAttributesCount,
|
|
71
|
+
droppedEventsCount: span.droppedEventsCount,
|
|
72
|
+
droppedLinksCount: span.droppedLinksCount,
|
|
73
|
+
};
|
|
74
|
+
// Span attributes: nested object keyed by literal dotted OTel names
|
|
75
|
+
// (Data Prepper trace-analytics-plain-raw / OTEL-faithful schema).
|
|
76
|
+
const spanAttributes = {};
|
|
77
|
+
for (const [key, value] of Object.entries(span.attributes)) {
|
|
78
|
+
if (value !== undefined) {
|
|
79
|
+
spanAttributes[key] = value;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
doc.attributes = spanAttributes;
|
|
83
|
+
// Resource attributes: nested resource.attributes object, literal dotted keys.
|
|
84
|
+
const resource = span.resource;
|
|
85
|
+
const resourceAttributes = {};
|
|
86
|
+
if (resource?.attributes) {
|
|
87
|
+
for (const [key, value] of Object.entries(resource.attributes)) {
|
|
88
|
+
if (value !== undefined) {
|
|
89
|
+
resourceAttributes[key] = value;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
doc.resource = { attributes: resourceAttributes };
|
|
94
|
+
// Set serviceName from resource
|
|
95
|
+
const serviceName = resource?.attributes?.['service.name'] || 'unknown';
|
|
96
|
+
doc.serviceName = serviceName;
|
|
97
|
+
// Instrumentation scope — nested object (runtime property is instrumentationScope).
|
|
98
|
+
const scope = span.instrumentationScope ?? span.instrumentationLibrary ?? {};
|
|
99
|
+
doc.instrumentationScope = {
|
|
100
|
+
name: scope.name || '',
|
|
101
|
+
...(scope.version ? { version: scope.version } : {}),
|
|
102
|
+
};
|
|
103
|
+
// Events (nested array; attribute keys are literal dotted OTel names)
|
|
104
|
+
if (span.events.length > 0) {
|
|
105
|
+
doc.events = span.events.map(event => {
|
|
106
|
+
const eventDoc = {
|
|
107
|
+
name: event.name,
|
|
108
|
+
time: hrTimeToDate(event.time),
|
|
109
|
+
droppedAttributesCount: event.droppedAttributesCount || 0,
|
|
110
|
+
};
|
|
111
|
+
if (event.attributes) {
|
|
112
|
+
const attrs = {};
|
|
113
|
+
for (const [key, value] of Object.entries(event.attributes)) {
|
|
114
|
+
if (value !== undefined) {
|
|
115
|
+
attrs[key] = value;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
eventDoc.attributes = attrs;
|
|
119
|
+
}
|
|
120
|
+
return eventDoc;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
doc.events = [];
|
|
125
|
+
}
|
|
126
|
+
// Links
|
|
127
|
+
if (span.links.length > 0) {
|
|
128
|
+
doc.links = span.links.map(link => ({
|
|
129
|
+
traceId: link.context.traceId,
|
|
130
|
+
spanId: link.context.spanId,
|
|
131
|
+
traceState: link.context.traceState?.serialize() || '',
|
|
132
|
+
attributes: link.attributes || {},
|
|
133
|
+
droppedAttributesCount: link.droppedAttributesCount || 0,
|
|
134
|
+
}));
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
doc.links = [];
|
|
138
|
+
}
|
|
139
|
+
// traceGroupFields (populated for root spans)
|
|
140
|
+
const hasRealParent = span.parentSpanContext?.spanId && span.parentSpanContext.spanId !== '0000000000000000';
|
|
141
|
+
if (!hasRealParent) {
|
|
142
|
+
doc.traceGroup = span.name;
|
|
143
|
+
doc.traceGroupFields = {
|
|
144
|
+
endTime: hrTimeToDate(span.endTime),
|
|
145
|
+
durationInNanos: durationNanos(span.startTime, span.endTime),
|
|
146
|
+
statusCode: statusCodeToInt(span.status.code),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return doc;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Custom SpanExporter that writes directly to OpenSearch.
|
|
153
|
+
*
|
|
154
|
+
* Formats spans in OSIS-compatible format so eval spans co-exist
|
|
155
|
+
* with agent spans in the same otel-v1-apm-span-* indices.
|
|
156
|
+
*/
|
|
157
|
+
export class OpenSearchSpanExporter {
|
|
158
|
+
constructor(config) {
|
|
159
|
+
this.shutdownRequested = false;
|
|
160
|
+
const auth = config.username && config.password
|
|
161
|
+
? `${config.username}:${config.password}`
|
|
162
|
+
: undefined;
|
|
163
|
+
this.client = new Client({
|
|
164
|
+
node: config.endpoint,
|
|
165
|
+
auth: auth ? { username: config.username, password: config.password } : undefined,
|
|
166
|
+
ssl: {
|
|
167
|
+
rejectUnauthorized: config.tlsSkipVerify !== true,
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
this.indexName = config.indexName || 'otel-v1-apm-span-000001';
|
|
171
|
+
console.log(`[Telemetry] OpenSearch exporter initialized → ${config.endpoint} (index: ${this.indexName})`);
|
|
172
|
+
}
|
|
173
|
+
export(spans, resultCallback) {
|
|
174
|
+
if (this.shutdownRequested) {
|
|
175
|
+
resultCallback({ code: ExportResultCode.FAILED });
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
this._export(spans)
|
|
179
|
+
.then(() => resultCallback({ code: ExportResultCode.SUCCESS }))
|
|
180
|
+
.catch((err) => {
|
|
181
|
+
console.error('[Telemetry] OpenSearch export failed:', err instanceof Error ? err.message : err);
|
|
182
|
+
resultCallback({ code: ExportResultCode.FAILED });
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
async _export(spans) {
|
|
186
|
+
if (spans.length === 0)
|
|
187
|
+
return;
|
|
188
|
+
// Use bulk API for efficiency
|
|
189
|
+
const body = [];
|
|
190
|
+
for (const span of spans) {
|
|
191
|
+
const doc = spanToDocument(span);
|
|
192
|
+
const docId = `${doc.traceId}/${doc.spanId}`;
|
|
193
|
+
body.push({ index: { _index: this.indexName, _id: docId } });
|
|
194
|
+
body.push(doc);
|
|
195
|
+
}
|
|
196
|
+
const response = await this.client.bulk({ body });
|
|
197
|
+
if (response.body.errors) {
|
|
198
|
+
const errors = response.body.items
|
|
199
|
+
.filter((item) => item.index?.error)
|
|
200
|
+
.map((item) => `${item.index.error.type}: ${item.index.error.reason}`);
|
|
201
|
+
if (errors.length > 0) {
|
|
202
|
+
console.warn(`[Telemetry] OpenSearch bulk write had ${errors.length} error(s):`, errors[0]);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
console.log(`[Telemetry] Exported ${spans.length} span(s) to OpenSearch`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
async shutdown() {
|
|
210
|
+
this.shutdownRequested = true;
|
|
211
|
+
await this.client.close();
|
|
212
|
+
}
|
|
213
|
+
async forceFlush() {
|
|
214
|
+
// No buffering — exports are immediate via bulk API
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=opensearchExporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opensearchExporter.js","sourceRoot":"","sources":["../../../telemetry/opensearchExporter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAgB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAU,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAkBxD;;GAEG;AACH,SAAS,YAAY,CAAC,MAAc;IAClC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACpD,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,MAAc;IACnC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,KAAa,EAAE,GAAW;IAC/C,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,IAAc;IACtC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,oBAAoB,CAAC;QACpD,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,kBAAkB,CAAC;QAChD,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,kBAAkB,CAAC;QAChD,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,oBAAoB,CAAC;QACpD,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,oBAAoB,CAAC;QACpD,OAAO,CAAC,CAAC,OAAO,oBAAoB,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAoB;IAC3C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,cAAc,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QACpC,KAAK,cAAc,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QACjC,KAAK,cAAc,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,IAAkB;IACxC,MAAM,GAAG,GAA4B;QACnC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO;QACnC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM;QACjC,YAAY,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,kBAAkB,CAAC;YACpG,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACtC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;QACvC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;QACnC,eAAe,EAAE,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;QAC5D,MAAM,EAAE;YACN,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACvC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;SACnC;QACD,UAAU,EAAE,EAAE;QACd,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;QACnD,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;KAC1C,CAAC;IAEF,oEAAoE;IACpE,mEAAmE;IACnE,MAAM,cAAc,GAA4B,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,cAAc,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,GAAG,CAAC,UAAU,GAAG,cAAc,CAAC;IAEhC,+EAA+E;IAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,MAAM,kBAAkB,GAA4B,EAAE,CAAC;IACvD,IAAI,QAAQ,EAAE,UAAU,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,kBAAkB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IACD,GAAG,CAAC,QAAQ,GAAG,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;IAElD,gCAAgC;IAChC,MAAM,WAAW,GAAG,QAAQ,EAAE,UAAU,EAAE,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;IACxE,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;IAE9B,oFAAoF;IACpF,MAAM,KAAK,GAAI,IAAY,CAAC,oBAAoB,IAAK,IAAY,CAAC,sBAAsB,IAAI,EAAE,CAAC;IAC/F,GAAG,CAAC,oBAAoB,GAAG;QACzB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;QACtB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrD,CAAC;IAEF,sEAAsE;IACtE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACnC,MAAM,QAAQ,GAA4B;gBACxC,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC9B,sBAAsB,EAAE,KAAK,CAAC,sBAAsB,IAAI,CAAC;aAC1D,CAAC;YACF,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACrB,MAAM,KAAK,GAA4B,EAAE,CAAC;gBAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC5D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;wBACxB,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;oBACrB,CAAC;gBACH,CAAC;gBACD,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC;YAC9B,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,QAAQ;IACR,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC3B,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE;YACtD,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;YACjC,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,IAAI,CAAC;SACzD,CAAC,CAAC,CAAC;IACN,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;IACjB,CAAC;IAED,8CAA8C;IAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,kBAAkB,CAAC;IAC7G,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,GAAG,CAAC,gBAAgB,GAAG;YACrB,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;YACnC,eAAe,EAAE,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;YAC5D,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;SAC9C,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,sBAAsB;IAKjC,YAAY,MAAgC;QAFpC,sBAAiB,GAAG,KAAK,CAAC;QAGhC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;YAC7C,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE;YACzC,CAAC,CAAC,SAAS,CAAC;QAEd,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACvB,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAS,EAAE,CAAC,CAAC,CAAC,SAAS;YACnF,GAAG,EAAE;gBACH,kBAAkB,EAAE,MAAM,CAAC,aAAa,KAAK,IAAI;aAClD;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,yBAAyB,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,iDAAiD,MAAM,CAAC,QAAQ,YAAY,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IAC7G,CAAC;IAED,MAAM,CAAC,KAAqB,EAAE,cAA8C;QAC1E,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,cAAc,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;aAChB,IAAI,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC;aAC9D,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjG,cAAc,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,KAAqB;QACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE/B,8BAA8B;QAC9B,MAAM,IAAI,GAAmC,EAAE,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC7D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK;iBAC/B,MAAM,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;iBACxC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,yCAAyC,MAAM,CAAC,MAAM,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,CAAC,MAAM,wBAAwB,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,UAAU;QACd,oDAAoD;IACtD,CAAC;CACF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OTel TracerProvider management for evaluation telemetry.
|
|
3
|
+
*
|
|
4
|
+
* Manages a singleton TracerProvider that exports evaluation spans
|
|
5
|
+
* via OTLP/HTTP to a collector, or directly to OpenSearch when an
|
|
6
|
+
* observability data source is configured.
|
|
7
|
+
*/
|
|
8
|
+
import { type Tracer } from '@opentelemetry/api';
|
|
9
|
+
import { type OpenSearchExporterConfig } from './opensearchExporter.js';
|
|
10
|
+
/**
|
|
11
|
+
* Configuration for evaluation telemetry
|
|
12
|
+
*/
|
|
13
|
+
export interface EvalTelemetryConfig {
|
|
14
|
+
/** Whether evaluation telemetry is enabled */
|
|
15
|
+
enabled: boolean;
|
|
16
|
+
/** OTLP exporter endpoint (e.g., http://localhost:4318/v1/traces) */
|
|
17
|
+
exporterEndpoint: string;
|
|
18
|
+
/** Optional headers for the OTLP exporter (e.g., auth) */
|
|
19
|
+
exporterHeaders?: Record<string, string>;
|
|
20
|
+
/** Service name for resource attributes */
|
|
21
|
+
serviceName?: string;
|
|
22
|
+
/** OpenSearch direct export config (derived from observability data source) */
|
|
23
|
+
opensearch?: OpenSearchExporterConfig;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolve telemetry config from environment variables and optional user config
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveEvalTelemetryConfig(userConfig?: Partial<EvalTelemetryConfig>): EvalTelemetryConfig;
|
|
29
|
+
/**
|
|
30
|
+
* Initialize the evaluation TracerProvider.
|
|
31
|
+
* Safe to call multiple times — subsequent calls are no-ops.
|
|
32
|
+
*
|
|
33
|
+
* When an OpenSearch config is provided (from observability data source),
|
|
34
|
+
* spans are written directly to OpenSearch in OSIS-compatible format.
|
|
35
|
+
* Otherwise, falls back to OTLP/HTTP exporter.
|
|
36
|
+
*/
|
|
37
|
+
export declare function initEvalTracerProvider(config: EvalTelemetryConfig): void;
|
|
38
|
+
/**
|
|
39
|
+
* Get the evaluation tracer. Returns a no-op tracer if telemetry is disabled.
|
|
40
|
+
*/
|
|
41
|
+
export declare function getEvalTracer(): Tracer;
|
|
42
|
+
/**
|
|
43
|
+
* Check if evaluation telemetry is enabled
|
|
44
|
+
*/
|
|
45
|
+
export declare function isEvalTelemetryEnabled(): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Force-flush any buffered spans to the exporter.
|
|
48
|
+
* Call after emitting spans to ensure they are exported promptly.
|
|
49
|
+
*/
|
|
50
|
+
export declare function flushEvalTracer(): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Flush pending spans and shut down the TracerProvider.
|
|
53
|
+
*/
|
|
54
|
+
export declare function shutdownEvalTracer(): Promise<void>;
|
|
55
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../telemetry/provider.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AAEH,OAAO,EAAS,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAKxD,OAAO,EAA0B,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEhG;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,gBAAgB,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,wBAAwB,CAAC;CACvC;AAKD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAwBzG;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAqDxE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAQrD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAOxD"}
|