See what your AI features cost and return.

Every model call is recorded as a span in the same trace as the request that made it, with its prompt, token counts, latency, cost and completion. Group spend and latency by feature, model or customer.

RecordsPrompt, tokens, cost, latency
ProvidersAnthropic, OpenAI, Bedrock, Vertex
Lives inThe request trace, not a silo
Trace 61b0…4fa · POST /assistant/reply18.4s · 1 error
POST /assistant/reply18.4s
retrieve.context112ms
llm.generate · attempt 15.0s
llm.generate · attempt 25.1s
llm.generate · attempt 35.9s
tool.lookup_order41ms

Trace a slow or expensive generation

Model calls appear in the same traces as everything else, so a retry loop shows up as latency and as spend. Here is one, from the slow span to the capped retry budget.

INC-402 · Checkout latency above SLO
Resolved
14:02:11 → 14:19:44 · 17m 33s
14:04:10
The slow span is a generation
Three attempts at the same completion, five seconds each, inside one user-facing request.
Traces
14:05:55
Spend spikes with the retries
Token cost for the hour is four times the previous day, at the same request volume.
AI · cost
14:18:00
Retry budget capped, spend follows
One attempt plus a fallback model brings latency under 3s and cost per reply back down.
AI · generations

Record and analyse model calls

Generations recorded as spans, with the cost, latency and quality signals that a plain error rate misses.

Generations

Every call with its model, parameters, prompt, completion, token counts and finish reason.

llm spans
Attributed cost

Spend per model, per feature and per customer, priced from the recorded token counts.

cost
Latency and streaming

Time to first token recorded separately from total time, for streaming responses.

ttft
Agent runs

Multi-step chains and tool calls as a tree, with the step that looped or stalled marked.

traces
Quality failures

Refusals, truncations, schema violations and empty completions, counted as errors.

quality
Open instrumentation

OpenTelemetry GenAI semantic conventions, so an SDK you already use reports without a wrapper.

otel genai
Alert on spend

Notify your team when cost per hour, error rate or p95 time to first token leaves its band.

alerting

Rank spend by model, feature and customer.

Because generations are spans, the same data answers where the bill is going and which model is responsible for most of it.

  • Per feature. Spend and latency grouped by the surface that called, rather than by API key.
  • Per model. Compare a cheaper model on real traffic before you switch to it.
  • Per customer. Find the tenant whose usage explains a change in the line.
  • Against a budget. Set a ceiling per feature and alert when spend approaches it.
Generations · last 24hby feature
assistant.replyclaude · 41k calls · 3.1 attempts avg$412
search.rerankgpt · 128k calls · 1.0 attempts avg$188
summarise.threadclaude haiku · 62k calls$31
classify.intentlocal model · 240k calls$0

Start tracing your model calls.

Report OpenTelemetry GenAI spans from the SDK you already use and see cost and latency per feature on your first day. Start on the free plan with no card.