Skip to Content

What does the input.value attribute mean in Rius?

In Rius, input.value is the generic input attribute that any span can carry, holding that span’s input as JSON or plain text. Rius stores it as sent and shows it for trace inspection. It is content, so it is covered by the privacy controls, and it plays no part in cost.

How it works

  • What it holds. OpenInference defines it as “the input value to an operation”, a string, with input.mime_type (text/plain or application/json) naming its format. Rius’s registry entry lists it at Development stability, as the input of an agent, tool, retriever or chain step, as text or JSON. Its partner is output.value, which holds the output.
  • Which spans carry it. Any span. It is not limited to model calls, tools or agents, so a chain step, a retrieval or a tool can all use it.
  • How Rius treats it. The key comes from OpenInference’s generic input and output convention. Rius stores it under the same key it was sent with and counts it as content. Rius does not normalize it into another key or derive analytics from it.
  • Older names that end up here. Rius moves some other keys onto input.value at ingest and removes the source key:
    • gen_ai.tool.call.arguments on tool spans. The tool’s arguments appear as its input, like any other span. If a span already carries a native input.value, that value wins. The source key is removed either way.
    • traceloop.entity.input from OpenLLMetry.
    • lmnr.span.input from Laminar, which is normalized onto Rius’s own keys.
  • What it is not. It is not the key for a model call’s chat messages. Those use gen_ai.input.messages in the GenAI message shape, and Rius renders them as the prompt on the span’s Input / Output tab. Cost comes from gen_ai.request.model and the gen_ai.usage.* token counts. Input.value does not feed it, and you never send a cost attribute.

The full list of keys and what each gets is in the span attribute reference.

Set it up

  1. Set input.value on the span as a string. Use plain text for a simple input or a JSON string for a structured one. Set output.value the same way for the result. How you set an attribute depends on your OpenTelemetry SDK or instrumentation. The span attribute reference covers which keys to emit, and Trace LLM calls with OpenTelemetry covers sending spans from any OpenTelemetry setup.
  2. If you trace a tool call yourself, you can send the arguments as gen_ai.tool.call.arguments. Rius moves them to input.value. Setting input.value directly gives the same result and takes priority.
  3. If your spans come from OpenLLMetry or Laminar, you do not need to rename anything. Rius reads traceloop.entity.input and lmnr.span.input and stores the value as input.value.
  4. For model calls where you want the prompt shown as messages, also send gen_ai.input.messages as a JSON array in the GenAI message shape. Each entry has a role and a list of parts.
  5. Decide whether content should leave your process. Content capture is on by default in the Rius SDKs, so they send input.value. Their capture_content setting and the mask callable cover it, and this variable strips it at export while the rest of the span still flows:
export RIUS_CAPTURE_CONTENT=false

An OpenInference instrumentation has its own switch: with OPENINFERENCE_HIDE_INPUTS=true it replaces input.value with the placeholder __REDACTED__ before the span leaves your process. 6. To find spans by their input, search and filter on input.value. Search on this key and not on the source names, because the source keys are removed at ingest.

What you get

  • The input of any span stored for trace inspection, whatever kind of span it is.
  • Tool inputs that render like any other span’s input, whether they arrived as gen_ai.tool.call.arguments, traceloop.entity.input or a native input.value.
  • One key to search and filter on, input.value, for inputs that arrive under several older names.
  • Cost and token analytics that stay independent of it. They come from the model name and token counts on model-call spans, and Rius computes cost on its side.
  • Content you can withhold. With capture turned off, the content attributes are not sent, and the rest of the span, such as timings, tokens and cost, is unaffected.

When something else fits

  • For a model call’s prompt and reply, use gen_ai.input.messages and gen_ai.output.messages, which Rius renders as messages on the Input / Output tab.
  • For a system prompt sent separately from the chat history, use gen_ai.system_instructions. For the tool definitions the model was shown, use gen_ai.tool.definitions.
  • For model, token and cost analytics, send gen_ai.request.model and the gen_ai.usage.* counts. Input.value does not drive them.

Still stuck? Get help

Last updated on