Benchmarking an agent looks like benchmarking any model right up until you notice one user request does not map to one model call. A single task fans out into a chain of model calls, tool invocations, and retries. The number you get from timing the underlying LLM in isolation — its tokens-per-second, its per-call latency — is real, but it is not the number the agent bills against. Measure the model alone and you will confidently rank the wrong configuration. That is the core claim of this article: for an agentic system, the operationally relevant unit is cost-per-completed-task at a fixed success rate and a fixed p95 end-to-end latency, not per-call throughput. The agent’s spend is dominated by how many calls it issues per task, not by how fast any single call runs. A benchmark that ignores fan-out inverts its own conclusion the moment you put it into production. Why per-call model benchmarking is misleading for an agent The intuition behind per-call benchmarking is reasonable. You have two candidate models, you want to know which is cheaper and faster, so you send each a representative prompt, measure latency and token cost, and pick the winner. For a single-shot chat feature, that is a defensible method — and it is close to the cost-per-request discipline we use when spec-ing the compute behind a production feature. An agent breaks the one-request-one-call assumption that method quietly depends on. When a user asks an agent to “reconcile these two invoices and flag discrepancies,” the agent might plan, call a retrieval tool, call the model again to interpret the results, call a calculator tool, hit a validation failure, retry the reasoning step, and finally produce an answer. That is one task and six model calls plus three tool invocations. The per-call benchmark measured one-sixth of the actual work. Here is where the ranking inverts. Suppose Model A is fast and cheap per call, but its weaker reasoning causes the agent loop to take more steps and retry more often — say it averages five model calls per task. Model B costs more per call but reasons well enough to finish in two. A per-call benchmark ranks A as optimal. A cost-per-task benchmark ranks B as optimal, because the agent’s bill is cost-per-call × calls-per-task, and A’s cheaper call price is more than erased by its higher call count. This is an observed pattern across agent loops we have examined, not a benchmarked constant — the multiplier depends heavily on the task distribution and the tools in the loop. The failure is not that the per-call number is wrong. It is that it measures a unit the agent does not settle in. The distinction between what a benchmark ranks and what it can tell you about cost is exactly the gap fan-out opens. How do you measure cost-per-completed-task when one request fans out? You measure the loop, not the model. The unit of measurement is a completed task — a user-level request that either reaches a valid terminal state or does not. Around that unit you instrument four things per candidate agent configuration: Calls-per-task — the count of model invocations, broken out by which step in the loop issued them (plan, act, reflect, retry). This is the fan-out multiplier. Tool-invocations-per-task — external calls (retrieval, code execution, API hits), which carry their own latency and, sometimes, their own cost. Task success rate — the fraction of tasks reaching a valid terminal state under a scoring rule you fix in advance. p95 end-to-end latency — wall-clock time from user request to final answer, across the whole loop including tool round-trips and retries, not the mean of individual calls. Cost-per-completed-task then rolls up as: sum the per-call model cost across all calls in a task, add per-invocation tool cost, and divide the total by the number of tasks that actually succeeded. Failed tasks still consumed calls, so their cost stays in the numerator while they leave the denominator — which is precisely why a config that “looks cheap” but fails often is expensive per completed task. The per-call latency and GPU utilisation figures you multiply against calls-per-task have to come from somewhere. That is the bridge to GPU profiling for per-call latency and utilisation measurements: profiling gives you the honest per-call cost; the agentic benchmark supplies the multiplier that turns it into a task-level number. A cost-per-task benchmark comparison between two agent configurations The surface below is illustrative — the numbers are worked assumptions to show the arithmetic, not measured results from a specific deployment. It compares two configurations of the same agent loop on the same 500-task suite, with the success-rate floor and latency ceiling held fixed. Metric (500-task suite) Config A — fast/cheap model Config B — stronger model Cost per model call $0.004 $0.011 Avg model calls per task 5.2 2.1 Avg tool invocations per task 3.0 2.4 Task success rate 0.82 0.94 p95 end-to-end latency 14.8 s 9.1 s Model cost per attempted task $0.021 $0.023 Cost per completed task $0.025 $0.025 Read the last two rows carefully. Per attempted task the two configs land almost level, which already contradicts the per-call headline that A is roughly 2.7× cheaper. Once you divide by the success rate to get cost-per-completed-task, A’s lower success rate erases its remaining edge, and B wins on p95 latency by a clear margin. A per-call benchmark would have shipped Config A. The cost-per-task benchmark surfaces that A is not actually cheaper once its fan-out and its failures are counted (illustrative figures; validate against your own task suite before deciding). How do you hold success rate and latency fixed so the comparison is fair? If you let each configuration pick its own success threshold or its own latency budget, you are no longer comparing like with like — you are comparing a config tuned for speed against one tuned for accuracy and pretending the cost numbers are commensurable. Fairness here means fixing the operating point before you measure cost. Concretely: declare the success-scoring rule up front (an exact-match check, an LLM-judge rubric, a schema-validation pass — whatever the task demands) and treat it as immutable across configs. Declare a p95 latency ceiling that reflects the product’s actual tolerance. Then, for every candidate, you cap the loop — a maximum call depth and a retry budget — so no configuration can buy an extra point of success rate by looping indefinitely and blowing the latency ceiling. The same fairness principle that governs structuring serving configs so cost-per-request comparisons are comparable applies one level up: the operating point is part of the spec, not a free variable. This matters because agent loops have a degenerate optimum. Given an unbounded retry budget, almost any agent’s success rate climbs toward 1.0 — at a cost-per-task that goes to infinity. A benchmark that does not fix loop depth and retry budget is measuring how patient you let the agent be, not how good the configuration is. How do retries, tool calls, and loop depth change cost-per-task? These three are the levers that make agent cost non-linear, and each one behaves differently. Retries are the most deceptive. A retry is a full re-issue of a failed step — sometimes the whole reasoning chain — so a task that retries twice can cost three times its baseline. Retries cluster on the hard tasks, which means a small tail of difficult inputs can dominate your cost-per-task while barely moving the mean call count. Report the distribution, not just the average; a p95 of calls-per-task often tells a more useful cost story than the mean. Tool calls add latency and sometimes direct cost, but their subtler effect is on the model calls around them. A slow or unreliable tool inflates p95 end-to-end latency even when model cost is flat, and a tool that returns noisy results triggers extra reflection and retry model calls. When you evaluate AI agents built for analytics workloads, the tool layer is frequently where the fan-out actually originates. Loop depth is the ceiling on both. A deeper allowed loop lets the agent recover from more failures — raising success rate — at a monotonically rising cost-per-task. The relationship between reasoning depth and spend is the agent-level version of the trade-off in chain-of-thought versus tree-of-thought at the reasoning layer: more deliberation buys quality, and you pay for it in calls. The benchmark’s job is to make that price visible per task so the depth setting becomes a deliberate choice rather than a default. Turning benchmark results into a defensible agent-config decision A cost-per-task benchmark earns its keep when it produces a selection someone can defend in a review. That means the output is not a single winner but a small table of configurations, each annotated with its cost-per-completed-task, its calls-per-task distribution, its measured success rate against the fixed rule, and its p95 latency against the fixed ceiling. The decision then reads as: “Config B costs the same per completed task as A, finishes faster, and succeeds more often, so we ship B” — an argument grounded in the unit the agent bills against. This is the discipline the [inference cost-cut sprint](Inference Cost-Cut Pack) runs against a buyer’s actual deployed agent loop: instrument the fan-out, produce the before/after cost-per-task, and turn a per-call tokens-per-second headline into a task-level number that survives contact with production. For teams shipping agents on AI-infrastructure and SaaS platforms, the gap between the two is usually where the surprise cloud bill lives. FAQ What matters most about agentic ai benchmark in practice? An agentic AI benchmark measures the whole agent loop — plan, model calls, tool invocations, retries — on completed tasks rather than individual model calls. In practice it instruments calls-per-task, task success rate, and p95 end-to-end latency for each candidate configuration, then computes cost-per-completed-task so the ranking reflects the unit the agent actually bills against. Why is per-call model benchmarking misleading for an agent, and what unit should you measure instead? Per-call benchmarking assumes one request equals one model call, but an agent fans one request out into many calls plus tool steps and retries. A fast, cheap model can still lose on total cost if its weaker reasoning makes the agent issue more calls per task. The unit to measure instead is cost-per-completed-task at a fixed success rate and p95 latency. How do you measure cost-per-completed-task when one request fans out into many model calls and tool steps? You instrument the loop rather than the model: count calls-per-task and tool-invocations-per-task, score task success against a fixed rule, and sum all per-call and per-tool costs for each task. Divide the total cost by the number of tasks that actually succeeded — failed tasks keep their cost in the numerator but leave the denominator, which is why frequent failures raise cost-per-completed-task. How do you hold task success rate and p95 end-to-end latency fixed so the agent-config comparison is fair? You declare the success-scoring rule and a p95 latency ceiling before measuring, and treat both as immutable across configurations. You also cap loop depth and retry budget so no config can buy extra success by looping indefinitely and blowing the latency ceiling. Fixing the operating point makes the cost numbers commensurable across candidates. What does a worked cost-per-task benchmark comparison between two agent configurations look like? You run both configs on the same task suite under the same success and latency constraints, then tabulate cost-per-call, calls-per-task, tool invocations, success rate, p95 latency, and cost-per-completed-task. A fast/cheap model that looks 2.7× cheaper per call can tie or lose once its higher fan-out and lower success rate are folded into cost-per-completed-task — which is the whole point of measuring at the task level. How do retries, tool calls, and loop depth change cost-per-task in a benchmark? Retries re-issue failed steps and cluster on hard tasks, so a small tail can dominate cost — report the distribution, not just the mean. Tool calls add latency and can trigger extra reflection and retry model calls, while deeper allowed loops raise success rate at a monotonically rising cost-per-task. Each lever moves cost non-linearly, which is why the benchmark must expose them per task. How do you turn agentic benchmark results into a defensible agent-config-selection decision? You produce a small table of candidate configurations annotated with cost-per-completed-task, calls-per-task distribution, measured success rate, and p95 latency — all against the fixed operating point. The decision then reads as an argument grounded in the unit the agent bills against, with before/after cost-per-task numbers rather than a per-call tokens-per-second headline. The open question for any team is not which model is fastest per call — it is how many calls per task each candidate configuration actually issues once your real tool layer and your real failure distribution are in the loop. Until you have measured that fan-out against a fixed success rate and a fixed p95 ceiling, the cost ranking you are holding is a per-call ranking wearing a task-level label.