Skip to Content
Rius

Are the LLM costs Rius shows exact, or estimates?

Rius shows costs as list-price estimates in US dollars, not exact or billed amounts. Each call is priced from its model and token counts using LiteLLM’s public model-price catalog at the model’s standard rates. Discounts you negotiated, and batch, flex, priority or long-context pricing, are not applied, so your provider invoice can differ from what Rius shows. Use the figures to see where money goes and how it changes, and use your invoice for the billed amount.

How it works

When a span reaches Rius, Rius looks up its requested model (gen_ai.request.model) in a price table and multiplies each token count by its own rate:

cost = uncached input tokens × input price + cache read tokens × cache read price + cache write tokens × cache write price + output tokens × output price

The details that decide how close an estimate is to your invoice:

  • Prices. They come from LiteLLM’s public model-price catalog, fetched when the ingest service starts, so new spans follow current prices. Everything is in US dollars.
  • Standard rates only. Rius does not apply long-context tiers, batch, flex or priority pricing, or any discount you negotiated. Custom model prices are not offered.
  • Cache tokens. Cache reads and writes are priced at the provider’s cache rates. A model whose catalog entry has no separate cache rates is charged its input rate for them.
  • Model names. Rius normalizes them before the lookup, so a provider prefix such as openai/gpt-4o, a dated snapshot, and the Amazon Bedrock and Google Vertex AI forms resolve to the same price.
  • Fixed at write time. Cost is set on the span when it is written. A later price change does not rewrite past calls, and a call stored without a price stays unpriced even after the catalog adds its model.
  • You never send a cost. You send the model name and token usage your instrumentation already records. A cost attribute you send is ignored.

A span that carries only gen_ai.response.model is not priced, because the lookup uses the requested model.

Set it up

You do not configure estimates. You make sure each call carries what Rius needs, then check how much of your traffic was priced.

  1. Send the requested model and token usage on every LLM call. The Rius SDKs and the supported integrations record these for you, so there is nothing extra to write for most setups. Never add a cost attribute.
  2. Open the cost by model chart on the Usage and cost page. It shows how many LLM calls were priced, so you can see how complete the estimate is.
  3. Look for models with an empty cost. If a model is not in the catalog, or a span reported no token usage, Rius leaves the cost empty, not zero. A missing price and a free call are different facts, so an unpriced call never counts as $0.
  4. Keep the coverage in mind when you read totals. Totals add up only the priced calls, and averages per trace divide by every trace, priced or not, so partial coverage lowers both. In the console, a total with nothing priced shows a dash.
  5. Set a cost alert on the estimate, which is a good fit for catching runs that got expensive, such as a prompt that grew or an agent stuck retrying. Cost is measured per trace:
FILTERS Service = checkout-agent RULES p95(Cost) > $2.00 WINDOW 1 hour

Firings on cost show the share of the window that was priced, so you can tell a high reading from a partly priced one. The full pricing walkthrough is in Track LLM and agent cost.

What you get

  • A cost on each priced LLM call, rolled up per trace, per agent, per end user and per workspace, all as list-price estimates in US dollars.
  • Cache reads and writes priced at their own rates, so a cache-heavy agent is not overstated at the full input rate where the catalog has cache prices.
  • Comparisons that hold up: because every call uses the same standard rates, you can compare models, agents, versions and customers on a like-for-like basis, and see cost change after a prompt or model change.
  • Honest gaps. An unknown model gets an empty cost instead of a misleading $0, and the coverage share shows how much of a window was priced.
  • Estimates that stay put. Past calls keep the price they were written with, so a chart for last week does not move when the catalog updates.

Expect your invoice to differ wherever negotiated, batch, flex, priority or long-context pricing applies. Treat it as a way to find the expensive part of a run, not as a reconciliation figure.

When something else fits

  • If you need the exact billed amount, use your provider invoice or billing dashboard. Rius does not apply negotiated, batch, flex, priority or long-context pricing, and does not accept custom model prices.
  • If most of your spend runs on a model that is missing from LiteLLM’s public catalog, expect empty costs for it. Check the coverage on the cost by model chart before you rely on the totals.

Still stuck? Get help

Last updated on