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/plainorapplication/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.argumentson 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.inputfrom OpenLLMetry.lmnr.span.inputfrom 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.messagesin the GenAI message shape, and Rius renders them as the prompt on the span’s Input / Output tab. Cost comes fromgen_ai.request.modeland thegen_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
- Set
input.valueon the span as a string. Use plain text for a simple input or a JSON string for a structured one. Setoutput.valuethe 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. - If you trace a tool call yourself, you can send the arguments as
gen_ai.tool.call.arguments. Rius moves them toinput.value. Settinginput.valuedirectly gives the same result and takes priority. - If your spans come from OpenLLMetry or Laminar, you do not need to rename anything. Rius reads
traceloop.entity.inputandlmnr.span.inputand stores the value asinput.value. - For model calls where you want the prompt shown as messages, also send
gen_ai.input.messagesas a JSON array in the GenAI message shape. Each entry has a role and a list of parts. - Decide whether content should leave your process. Content capture is on by default in the Rius SDKs, so they send
input.value. Theircapture_contentsetting and themaskcallable cover it, and this variable strips it at export while the rest of the span still flows:
export RIUS_CAPTURE_CONTENT=falseAn 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.inputor a nativeinput.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.messagesandgen_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, usegen_ai.tool.definitions. - For model, token and cost analytics, send
gen_ai.request.modeland thegen_ai.usage.*counts. Input.value does not drive them.
Related
Last updated on