Eval2Otel follows OpenTelemetry GenAI semantic conventions first and keeps a small explicit registry for attributes that are not yet stable upstream or are Eval2Otel-specific.
Each registry entry has a source:
otel-genai: an OpenTelemetry GenAI or closely related OpenTelemetry attribute/metric name.openllmetry-compatible: a RAG quality name that follows common OpenLLMetry style and should stay easy to query across LLM observability tools.eval2otel-extension: an Eval2Otel-owned field for contract, provenance, evidence, privacy, framework, or provider-adapter behavior.
- Prefer stable OpenTelemetry GenAI names when they exist.
- Use
evalops.*for Eval2Otel contract and evidence fields. - Use
eval.*for framework-level evaluation attributes. - Use provider prefixes such as
openai.*,anthropic.*,cohere.*,aws.bedrock.*, andgoogle.vertex.*only for provider-native diagnostics. - Do not emit raw RAG queries or prompt content as attributes. Hash them or put them behind opt-in content events.
- Add tests with
assertRegisteredAttributeswhenever a converter emits a new attribute.
Eval2Otel currently emits these RAG attributes:
gen_ai.data_source.idgen_ai.rag.retrieval_methodgen_ai.rag.documents_retrievedgen_ai.rag.documents_usedgen_ai.rag.context_precisiongen_ai.rag.context_recallgen_ai.rag.answer_relevancegen_ai.rag.faithfulnessgen_ai.rag.query_sha256gen_ai.rag.context_window_tokensgen_ai.rag.context_tokens_usedgen_ai.rag.context_truncatedgen_ai.rag.chunk_sizegen_ai.rag.overlap_sizegen_ai.rag.mean_reciprocal_rankgen_ai.rag.ndcggen_ai.rag.citation_coveragegen_ai.rag.retrieval_used_ratiogen_ai.rag.top_k_relevance_meangen_ai.rag.top_k_relevance_min
Chunk events may add:
gen_ai.rag.chunk.indexgen_ai.rag.chunk.idgen_ai.rag.chunk.sourcegen_ai.rag.chunk.relevance_scoregen_ai.rag.chunk.positiongen_ai.rag.chunk.tokensgen_ai.rag.chunk.usedgen_ai.rag.chunk.citation_idgen_ai.rag.chunk.evidence_sha256
import { assertRegisteredAttributes } from 'eval2otel';
assertRegisteredAttributes({
'gen_ai.provider.name': 'openai',
'evalops.contract.version': 'eval2otel.v1',
'eval.promptfoo.score': 0.9,
});If this throws, either move the attribute into an allowed namespace or add it to
src/semconv.ts with a source, signal, stability, and description.