Dash0 acquires Polar Signals

Last updated:

Eval Result Records

Reference for the gen_ai.evaluation.result log records that store each eval verdict, including their attributes and error types.
Beta

Evals is in beta. Eval runs are not charged during the beta. Behavior and UI may change. Attributes prefixed with dash0.gen_ai.evaluation are in development and may change.

Dash0 stores every eval verdict as a log record. Use these records to query results in the Logs Explorer, or to build your own views, dashboards, and check rules on eval results. The built-in GenAI Evaluation Results logs view lists them with their type, eval name, label, and explanation.

Record Structure

  • Event name: gen_ai.evaluation.result.
  • Severity: INFO.
  • Timestamp: The end time of the judged span, so a verdict falls in the same time bucket as the span it describes. The observed timestamp records when the judge produced the verdict.
  • Trace and span IDs: The IDs of the judged span. Use them to correlate the record with its span.
  • Resource: The resource of the judged span.
  • Body: The eval name and the result, for example Groundedness: 0.42, Answered the question: true, or Request topic: billing.

Result Attributes

Each record carries attributes from the OpenTelemetry GenAI semantic conventions and Dash0-specific dash0.gen_ai.evaluation attributes.

OpenTelemetry GenAI Attributes

AttributeDescription
gen_ai.evaluation.nameIdentifier of the eval, derived from its name when it was created.
gen_ai.evaluation.score.valueThe numeric score. For boolean evals, 1 for true and 0 for false. For categorical evals, the zero-based position of the label in the eval's label list.
gen_ai.evaluation.score.labelFor numeric and boolean evals, pass or fail. A numeric eval without a threshold always records pass. For categorical evals, the label the judge chose.
gen_ai.evaluation.explanationThe judge's one-sentence explanation.
gen_ai.response.idThe ID of the judge's response.
Tip

To find failing results, filter on gen_ai.evaluation.score.label = fail. Categorical evals have no pass or fail outcome, so filter on the label you want to find instead, for example abuse.

Dash0 Attributes

AttributeDescription
dash0.gen_ai.evaluation.display_nameThe eval's display name.
dash0.gen_ai.evaluation.typeThe output type: numeric, boolean, or categorical.
dash0.gen_ai.evaluation.idThe ID of the eval definition.
dash0.gen_ai.evaluation.versionThe version of the eval definition that produced the verdict.
dash0.gen_ai.evaluation.sourcejudge for verdicts produced by a Dash0 eval.
dash0.gen_ai.evaluation.judge.modelThe model class of the judge: light or standard.

Usage Attributes

AttributeDescription
dash0.gen_ai.evaluation.usage.input_tokensInput tokens the judge consumed, excluding cache reads and cache writes.
dash0.gen_ai.evaluation.usage.output_tokensOutput tokens the judge generated.
dash0.gen_ai.evaluation.usage.cache_read.input_tokensInput tokens the judge read from the prompt cache.
dash0.gen_ai.evaluation.usage.cache_creation.input_tokensInput tokens the judge wrote to the prompt cache.
dash0.gen_ai.evaluation.usage.creditsThe credits computed for the judge call. This is the amount shown in the Credits column and the Breakdown card. Eval runs are not charged during the beta.

Attributes Copied from the Judged Span

Each record also carries these attributes from the judged span when the span has them, so you can filter and group results the same way you filter spans:

  • Agent and conversation: gen_ai.agent.name, gen_ai.conversation.id, gen_ai.operation.name, gen_ai.harness.name.
  • Model: gen_ai.provider.name, gen_ai.request.model.
  • Usage of the judged call: gen_ai.usage.input_tokens, gen_ai.usage.output_tokens, gen_ai.usage.cache_creation.input_tokens, gen_ai.usage.cache_read.input_tokens, dash0.gen_ai.usage.cost. These describe the judged call, not the judge.
  • User and team: user.id, user.name, user.email, dash0.team.name.
  • Version control: dash0.gen_ai.vcs.provider.name, dash0.gen_ai.vcs.owner.name, dash0.gen_ai.vcs.repository.name, dash0.gen_ai.vcs.repository.url.full, dash0.gen_ai.vcs.ref.head.name, dash0.gen_ai.vcs.ref.head.type.
  • Instrumentation scope: dash0.gen_ai.original_scope_name holds the instrumentation scope name of the judged span, because the record's own scope is the Dash0 eval pipeline.

Failed Evaluations

When the judge call fails, Dash0 still writes a gen_ai.evaluation.result record for the span. The record carries the eval, usage, and copied attributes, plus an error.type attribute, but no score, label, or explanation. The Evals pages and the span sidebar ignore these records.

error.typeMeaning
timeoutThe judge did not respond in time.
judge_call_failedThe call to the judge model failed.
model_class_unavailableThe eval's model class is not available.
no_response, no_text_outputThe judge returned no usable output.
output_truncatedThe judge's answer was cut off.
unparsable_outputThe judge's answer did not have the expected shape.
missing_score, invalid_scoreA numeric verdict had no score, or a score outside 0.0 to 1.0.
missing_valueA boolean verdict had no value.
unknown_labelA categorical verdict named a label the eval does not define.
empty_explanationThe judge returned no explanation.

Spans that Dash0 skips before calling the judge, for example because a referenced attribute is missing, produce no record at all. See Limitations.

Further Reading

  • Analyze Eval Results — Read scores, outcomes, and labels per eval and per span.
  • Key Concepts — Terminology for triggers, sampling, verdicts, and credits.
  • Logging — Query and filter log records in the Logs Explorer.