e-volv

Every agent run and its cost

Point any OpenTelemetry-instrumented agent at e-volv Berserker and every run appears with its tokens, cost, tool calls and session. Replay a production run on a new prompt with write tools stripped, catch a report that claims what no tool call did, and score a sample of live runs as they land. It works on its own, and beside e-volv Observer the run sits next to the logs and errors of the service that ran it.

  1. Prompt
  2. Model call
  3. Tool call
  4. Model call
  5. Answer

The strings part at the tool call. Everything after it is where the tokens went, which is the reading a bill cannot give you. Timings illustrative.

Eight surfaces

In the order the product's own navigation lists them, each with the question it answers and a drawing of what it shows.

  1. Runs

    Every top-level agent span becomes one row, whether it arrived as OpenTelemetry GenAI conventions, OpenInference or the Vercel AI SDK. Open a run and it reads as a tree: the agent at the root, each model call and each tool call beneath it in the order they ran, nested agents indented under theirs. Spans that speak no GenAI, like an HTTP call inside a tool, stay in the tree so the timings add up.

    Which call failed, how long each step took, and what the run cost.

    • model
    • tokens in / out / cached
    • cost
    • tool calls
    • error
    • duration
    5 spans · 32 s · 4.1k tokens · $0.012agenttriagemodelgpt-5-minitool✕ read_tickettoolread_ticketmodelgpt-5-mini
    Runs, drawn. Values illustrative.
  2. Sessions

    Runs that share a conversation id are threaded into one session, in the order they happened. A support thread, a ticket that went back and forth, or a user who asked the same thing four times reads as one exchange with its total cost, instead of nine unrelated rows in a list.

    What happened across the whole conversation, and what it cost end to end.

    • conversation id
    • user
    • runs in order
    • session cost
    • first and last turn
    conversation conv_4812 · user u_19run 1$0.04run 2$0.03run 3$0.09run 4$0.05run 5$0.06run 6$0.046 runs · 11 min · $0.31
    Sessions, drawn. Values illustrative.
  3. Cost

    Every model call is priced as it lands, from a maintained price list or from the price you set on the model, with cached tokens priced as cached. Spend then rolls up by agent, by model and by day, so a jump shows which agent caused it and which model it went to.

    Where the money went this week, and which agent or model moved the line.

    • spend by day
    • by agent
    • by model
    • tokens
    • cost per run
    gpt-5-miniclaude-haikuclaude-sonnetMTWTFSSFri $4.80triage, claude-sonnet
    Cost, drawn. Values illustrative.
  4. Evals

    Build a dataset from real runs, fixtures or a CSV. An experiment replays it through up to four prompts or models side by side, with write tools stripped so nothing is changed, and scores every answer: the claims guardrail, a JSON check, or a judge model on your rubric. Online scoring does the same for a share of live runs as they land.

    Is the new prompt or model better than the old one, on the cases that matter.

    • dataset
    • up to 4 variants
    • score per case
    • mean score
    • cost per variant
    ABCDrefund request0.820.880.910.86angry customer0.410.730.780.80wrong order0.770.750.840.90vague ask0.520.470.690.72mean0.630.710.810.82A prompt v3 · B v4 · C v4 on mini · D v4 on sonnet
    Evals, drawn. Values illustrative.
  5. Review

    Runs that scored low online, or that someone flagged, collect in one queue. A reviewer reads the run, gives it a thumb, a label and a note, and with one click adds it to a dataset, so the failure that reached production becomes a case every later experiment is scored on.

    Which runs a person should look at, and how a bad one becomes a test.

    • score
    • thumbs
    • label
    • note
    • add to dataset
    review queue · 4run 7f2ascore 0.31run 91c0flaggedrun 3b7escore 0.44run c41dscore 0.38datasetregressions+1 casethumbs down · label: wrong tool · note added
    Review, drawn. Values illustrative.
  6. Prompts

    Prompts live in e-volv as named, numbered versions. An agent fetches one by name and label, such as production, so moving the label ships a prompt change without a deploy. Each version carries the cost and score of the runs that used it, so a rollback is a decision made on numbers.

    Which prompt version is live, and whether it is cheaper or better than the last.

    • name
    • version
    • label
    • runs
    • cost
    • score
    prompt support-triagev1$.031score .64v2$.028score .70productionv3$.019score .81stagingv4$.022score .79
    Prompts, drawn. Values illustrative.
  7. Alerts

    Set rules on spend per day, error rate and p95 duration, per agent. When a line crosses its threshold the alert goes to the same channels as every other alert in the workspace, so an agent that starts looping at night is caught by the rule, not by the invoice.

    Did an agent get slower, fail more, or spend more than it should.

    • spend per day
    • error rate
    • p95 duration
    • threshold
    • channel
    triage · p95 duration · 24 hrule: p95 over 8 s8 s0 s✕ alert at 8.6 s, sent to #agents-oncall
    Alerts, drawn. Values illustrative.
  8. Usage

    Agent spans counted this month against the allowance, with retention alongside. The meter fills as runs land, so the ceiling is something you watch coming and plan for, not something you find out about when ingest stops.

    How close this month is to the allowance.

    • spans this month
    • allowance
    • retention
    agent spans · this month025,00050,00036,120 of 50,000 · 14 days retention
    Usage, drawn. Values illustrative.

What happens to a run

One run, from the span your agent emits to the score it gets. Each stage is named the way the code names it, so you can go and find it.

  1. Span

    Your agent emits invoke_agent, chat and execute_tool spans, through OpenTelemetry or through @e-volv/agents and evolv-agents, which set the same attributes without a collector.

  2. Rollup

    After the span is stored, the trace is read back and every top-level agent span becomes an agent_run row: tokens summed from the model calls, tool calls counted, the cost priced per call.

  3. Score

    A share of runs you choose goes to the scorers as it lands: the claims guardrail, a JSON check, a judge model on your rubric. Low scores join the review queue.

  4. Replay

    Any run with its prompt captured can be replayed on a new prompt or model, read only, and diffed against what it said the first time.

How runs get in

Already on OpenTelemetry? Point your exporter at the Berserker endpoint and nothing else changes. Not on OpenTelemetry? Two thin packages set the same attributes without a collector, and both are on their registries now.

  • OpenTelemetryOTLP over HTTP to the traces endpoint, with the GenAI, OpenInference or Vercel AI SDK attributes read as they arrive. Docs
  • Node.jsnpm install @e-volv/agents
  • Pythonpip install evolv-agents

Trace your first agent

Works with or without e-volv Observer. Free for 50,000 agent spans a month with 14 days of retention, and included with e-volv Observer paid or Studio at 1,000,000 spans and 30 days.

Start freeInstrument an agentSee the fares

We use only essential cookies to keep you signed in and the app working. With your consent we may enable optional analytics to help us improve e-volv. See our Privacy Policy and Terms.