What does the gen_ai.provider.name attribute mean in Rius?
Rius reads gen_ai.provider.name as a string that names the provider behind a model call, for example openai or anthropic. It is stored on the span, and Rius moves the value of the older gen_ai.system key onto it when spans are ingested. Cost does not come from it: Rius computes cost from the request model and the token counts.
How it works
- What the key holds. A string with the provider’s name, such as
openaioranthropic. The span attribute reference lists it with the model attributes that drive model analytics. - What sits next to it.
gen_ai.request.modelis the model you asked for.gen_ai.response.modelis the model the provider reports.gen_ai.response.idis the provider’s completion id.gen_ai.provider.namenames the provider itself. - The older name.
gen_ai.systemis deprecated. Rius moves its value togen_ai.provider.nameat ingest and stores it under the new key. Search and filter ongen_ai.provider.name, because the old key no longer holds the value. Rius normalizes by filling gaps, never by overwriting, so a value you send natively undergen_ai.provider.nameis the one that stays. - What it does not do. Cost is computed server-side from
gen_ai.request.modelplus thegen_ai.usage.*token counts. The provider name is not one of those inputs, so setting it does not change a span’s cost. You never send a cost attribute. - Who defines it. It is an OpenTelemetry GenAI convention key, listed with the other upstream keys Rius reads in the registry.
Set it up
-
Send your spans to the Rius ingest endpoint over OTLP/HTTP with an API key from the console. This is the wire contract in short. The full setup for your language is in Trace LLM calls with OpenTelemetry.
POST https://ingest.eu.console.rius-glassflow.com/v1/traces Authorization: Bearer <your API key> Content-Type: application/x-protobuf -
On the span for each model call, set
gen_ai.provider.nameas a string, for exampleopenaioranthropic. -
Set
gen_ai.request.modeland thegen_ai.usage.*token counts on the same span. These are what Rius uses to compute cost. A span with no model, or with no token counts, gets no cost, whether or not it has a provider name. -
If your instrumentation still writes
gen_ai.system, you do not need to rename it. Rius moves the value togen_ai.provider.nameat ingest. -
If you export without the Rius SDKs, raise the attribute limit. OpenTelemetry SDKs keep at most 128 attributes per span and drop the rest without an error, so a crowded span can lose its model, tools, usage or messages, and any other attribute you set on it can be dropped too.
export OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT=4096
What you get
- The provider name is stored on the span as
gen_ai.provider.name, so you can search and filter trace inspection on it. - Spans from instrumentation that still sends
gen_ai.systemend up under the same key as spans that send the current name. You search one key for both. - Cost for the span is unaffected by this key. Rius computes it from the request model and the token counts, as a list-price estimate in US dollars.
- A span that carries the key, the model and the token counts has the provider, the model and the usage described in one place.
When something else fits
- If you want to know which model served a call, read
gen_ai.request.modelandgen_ai.response.model, not the provider name. - If you want cost, send the request model and token counts. The full list of attributes Rius reads is in the span attribute reference.