Skip to Content

What does the output.value attribute mean in Rius?

In Rius, output.value is a general-purpose attribute that holds what a span produced, as JSON or plain text, and it can sit on any span. It is a content attribute that Rius stores as sent and shows for trace inspection. Rius also fills it from the tool result key gen_ai.tool.call.result and from OpenLLMetry’s traceloop.entity.output. It does not drive cost, which Rius computes from the model name and token counts.

How it works

  • What it holds. OpenInference defines it as “the output value of an operation”, a string, with output.mime_type (text/plain or application/json) naming its format. Rius’s registry entry lists it at Development stability, as the output of an agent, tool, retriever or chain step, as text or JSON. Its partner is input.value, which holds the step’s input.
  • Which spans carry it. Any span, whether it is a tool call, a chain step, an agent run or a model call. Model-call spans usually carry their reply in gen_ai.output.messages instead, which uses the GenAI message shape and renders as the prompt and completion on the span’s Input / Output tab.
  • How it is stored. As sent. A value you set on output.value stays under that key, so you search and filter on output.value.
  • Older and other names that become it. Rius moves some keys onto output.value at ingest:
    • For tool calls, gen_ai.tool.call.result is moved to output.value, so the tool’s output renders like any other span’s output. If the span already has a native output.value, that one wins. The source key is removed either way, so search on output.value.
    • For OpenLLMetry and Traceloop spans, traceloop.entity.output becomes output.value.
    • Laminar’s lmnr.span.output is normalized at ingest under the canonical keys.
  • What Rius computes from it. Nothing numeric. It counts as content, so it is not used for cost, tokens or timing. Cost comes from gen_ai.request.model plus the gen_ai.usage.* token counts, and you never send a cost attribute.
  • Privacy. Because it is content, output.value is among the values that content controls can strip before export. Content capture is on by default in the Rius SDKs, so they send it. Setting RIUS_CAPTURE_CONTENT to false strips it at export, while timings, tokens and cost are unaffected. An OpenInference instrumentation run with OPENINFERENCE_HIDE_OUTPUTS=true replaces it with the placeholder __REDACTED__ instead.

Set it up

  1. Send traces to Rius over OTLP/HTTP with your API key. The span attribute reference lists every attribute Rius reads and covers the full contract.
POST https://ingest.eu.console.rius-glassflow.com/v1/traces Authorization: Bearer <your API key> Content-Type: application/x-protobuf
  1. On each span whose result you want to inspect, set output.value to the result as JSON or plain text. Set input.value the same way for the input.
  2. For a tool span, you can set gen_ai.tool.call.result instead, and Rius moves it to output.value. A native output.value takes priority.
  3. For a model call, put the reply in gen_ai.output.messages as JSON in the GenAI message shape, so the prompt and completion render on the Input / Output tab. Also set gen_ai.request.model and the token counts so Rius can compute cost.
  4. If you already use OpenLLMetry or Traceloop, change nothing. Rius reads traceloop.entity.output and stores it as output.value.

The Trace LLM calls with OpenTelemetry guide walks through the wider setup for sending spans from your own OpenTelemetry code.

What you get

  • The output of a step is stored on the span, whatever the span’s kind, so you can inspect what a tool, chain or agent step returned.
  • Tool results from different senders land under one key, output.value, so one search or filter covers them.
  • A span without content still shows its timings, tokens and cost. A span with no content attributes shows “Content not captured” on the Input / Output tab.
  • The same content controls that cover prompts and replies cover output.value, so you can send structure only when the output is sensitive.

When something else fits

  • For a model call, use gen_ai.output.messages in the GenAI message shape. It is the key Rius renders as the completion, and output.value is the generic fallback for any other span.
  • If you need numbers such as cost, tokens or time to first token, set the model and usage attributes. output.value carries content only.

Still stuck? Get help

Last updated on