-
Notifications
You must be signed in to change notification settings - Fork 0
docs(roadmap): add Phase 4J OTel GenAI evaluation-span mapping #2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -26,6 +26,7 @@ It complements `docs/STATUS.md` (tactical checklist) and `docs/PRP.md` (original | |
| - [Phase 4H: Documentation navigability](#-phase-4h-documentation-navigability-new) | ||
| - [Phase 4I: GitHub PR-native visibility](#-phase-4i-github-pr-native-visibility-new) | ||
| - [Phase 4D: Trusted confidence reports and adoption execution](#-phase-4d-trusted-confidence-reports-and-adoption-execution-new) | ||
| - [Phase 4J: OTel GenAI evaluation-span mapping](#-phase-4j-otel-genai-evaluation-span-mapping-new) | ||
|
|
||
| > **Note on ordering:** sections below are in the order they were added, not | ||
| > strict numeric order. Physical order is 4A, 4B, 4C, 4E, 4G, 4F, 4H, 4D. | ||
|
|
@@ -1673,6 +1674,58 @@ Acceptance criteria: | |
|
|
||
| --- | ||
|
|
||
| ## 🚧 Phase 4J: OTel GenAI evaluation-span mapping (NEW) | ||
|
|
||
| **Why**: a 2026-09-15 competitive/gap scan found the OpenTelemetry GenAI | ||
| semantic-conventions SIG shipped `gen_ai.evaluation.result` (added in the | ||
| GenAI conventions v1.38.0 cut, Oct 2025) specifically to attach an | ||
| evaluation's `evaluation.name`, `score.value`, `score.label`, and | ||
| `explanation` to the span/trace that produced the underlying model or tool | ||
| call. Langfuse, Arize Phoenix, and Datadog LLM Observability already consume | ||
| this event on the standard OTLP endpoint. `docs/integrations/trace-stacks.md` | ||
|
Comment on lines
+1684
to
+1685
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win 🔎 Supported by static analysis🏁 Script executed: #!/bin/bash
set -u
printf '%s\n' '--- targeted roadmap section ---'
sed -n '1418,1460p' docs/ROADMAP.md
printf '%s\n' '--- linked integration document ---'
sed -n '1,240p' docs/integrations/trace-stacks.md
printf '%s\n' '--- relevant repository references ---'
rg -n -i 'Langfuse|Arize Phoenix|Datadog|LLM Observability|standard OTLP|evaluation event|gen_ai\.evaluation|evaluation' docs README.md .github 2>/dev/null | head -240Repository: IcodeNet/eval-dashboards Length of output: 12809 🌐 Web query:
💡 Result: <search_synthesis> <source_evidence> Citations:
Add versioned citations for event support or remove the ingestion claim. The inspected vendor sources establish generic OTLP trace ingestion, but they do not establish support for the specific 🤖 Prompt for AI AgentsSource: MCP tools |
||
| mentions OpenTelemetry only in a one-line "applies to" sentence and 4D.2 | ||
| already flags (Audit 2026-09-14) that no semantic-convention or | ||
| span-attribute mapping exists. This repo's `TraceReference` (`traceId`, | ||
| `spanId`, `traceUrl`, `spanUrl`) is a generic evidence link with no | ||
| documented way to round-trip against `gen_ai.evaluation.result`, so a team | ||
| piping OTel-instrumented agent traces into `eval-report/v1` has to invent the | ||
| mapping from scratch. Source: | ||
| https://john-hodge.com/blog/opentelemetry-genai-semantic-conventions (state | ||
| of the spec as of July 2026, confirms `gen_ai.evaluation.result` landed in | ||
| v1.38.0 and the GenAI surface remains Development/unstable, so document as | ||
| best-effort/versioned guidance, not a hard schema dependency). | ||
|
|
||
| ### 4J.1 Document and test the `gen_ai.evaluation.result` ↔ `EvalRow` mapping (P1, S) | ||
|
|
||
| - [ ] Add a documented field mapping table to `docs/integrations/trace-stacks.md` | ||
| (or a new `docs/integrations/otel-genai.md`) from `gen_ai.evaluation.result` | ||
| attributes (`gen_ai.evaluation.name`, `gen_ai.evaluation.score.value`, | ||
| `gen_ai.evaluation.score.label`, `gen_ai.evaluation.explanation`) plus the | ||
| correlating span's `trace_id`/`span_id` to `EvalRow` fields | ||
| (`judgeCategory`/`score`/`judgeReasoning`/`trace.traceId`/`trace.spanId`). | ||
|
Comment on lines
+1700
to
+1705
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win Define the correlation fallback for records without span context. The mapping criterion covers 🤖 Prompt for AI Agents |
||
| - Explicitly note the GenAI conventions are unstable/Development status per | ||
| the OTel spec and that consumers should pin a convention version, matching | ||
| this repo's existing "additive, versioned" posture toward `eval-report/v1`. | ||
|
Comment on lines
+1706
to
+1708
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win Specify an immutable GenAI convention reference. The canonical 🤖 Prompt for AI Agents |
||
| - [ ] Add one runnable example (fixture OTLP/JSON span export containing a | ||
| `gen_ai.evaluation.result` event → `eval-dashboards import`-style or | ||
| adapter-helper conversion → valid `eval-report/v1` row with `trace` | ||
| populated) with a passing test asserting the mapped fields round-trip. | ||
| - [ ] Cross-link this doc from `docs/adoption-map.md` and the existing | ||
| trace-first evidence example (4C.9) so OTel-based teams have one | ||
| concrete, tested path instead of ad hoc field guessing. | ||
|
|
||
| Acceptance criteria: | ||
|
|
||
| - A fixture containing a `gen_ai.evaluation.result` event maps to an | ||
| `EvalRow` with `trace.traceId`/`trace.spanId` populated and a passing test | ||
| proves it, matching the existing 4B.3 importer acceptance bar (fixture + | ||
| test + correct field mapping). | ||
| - `docs/integrations/trace-stacks.md` (or the new OTel-specific page) states | ||
| the OTel GenAI evaluation-event mapping explicitly instead of only naming | ||
| OpenTelemetry as a supported trace backend in passing. | ||
|
|
||
| --- | ||
|
|
||
| ## Product philosophy | ||
|
|
||
| - **Runner-agnostic core:** No dependency on a single eval harness, LLM vendor, or cloud | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Keep the physical-order list complete.
The note says “Physical order is,” but its list omits the table-of-contents entries for Phases 4I and 4J. The note explains non-numeric ordering; it does not make the list non-exhaustive. Add the omitted phases in their physical order, or state explicitly that the list is non-exhaustive.
🤖 Prompt for AI Agents