Rubric
Contents — domains, guide and mocks

Accuracy versus latency

CCAR-P 3.313 min read · checked 21 September 2026

Task statementEvaluate accuracy-latency trade-offs and justify configuration decisions

From requirement to a defensible configuration

  1. Set the targetsquality bar, p95 latency, cost per task
  2. Build the evalreal inputs, graded, several trials
  3. Sweep configsmodel, effort, output, retrieval depth
  4. Pick and recordcheapest config meeting every target
  5. Monitorsame metrics in production

Re-run the sweep when models, prompts or traffic change

The justification is the sweep: every candidate is measured on the same eval set for quality, latency percentiles and cost, and the choice is written down with what it gave up.

“Latency” is at least two numbers

Anthropic’s reducing-latency guide separates baseline latency — the time to process the prompt and generate the whole response — from time to first token (TTFT), the wait before anything appears. They respond to different levers. A chat user staring at a spinner cares about TTFT; a back-end service that must return a JSON decision before an HTTP timeout cares about total time. A voice agent cares about both. Always ask which one the requirement is really about, and state it as a percentile (p95 or p99), because the slow tail is what breaks an SLA.

Total time is roughly input processing, plus thinking, plus output tokens divided by output speed, plus any tool round trips. That decomposition tells you where each lever acts. Shorter or cached input helps TTFT. Less thinking and shorter output help total time. Fewer tool round trips help both. Output speed is fixed per model unless you pay for fast mode.

LeverLatency effectAccuracy riskCost effect
StreamingUsers see text from the first token, not the last; total unchangedNoneNone
Prompt cachingLower TTFT on long, repeated prefixesNoneLower (reads at 0.1× input on most models)
Shorter prompt and outputLess to read and writeLow if nothing essential is cutLower
Lower effortLess thinking, fewer and terser tool callsSome capability loss on hard tasksLower
Smaller model tierFaster (Haiku 4.5 is listed fastest)Can fail the quality bar on hard casesLower
Fast mode (Opus 5 / 4.8, preview)Up to 2.5× output speed; no TTFT gainNone — same modelPremium price
Batch APIMinutes to hours; most batches under an hourNone50% off
More retrieval, verification or agentsSlowerOften improves accuracyHigher

Free speed first: levers that cost no accuracy

Some levers change what users experience without touching what the model does. Streaming sends tokens as they are generated, so a two-second answer starts appearing almost at once. Prompt caching skips reprocessing of a stable prefix, which shortens TTFT on long system prompts and documents (covered in 2.5). Parallelism in your own code — running independent retrievals or tool calls at the same time — removes waits the model never needed. And trimming input that does not affect the answer shortens processing and can even help accuracy (covered in 2.4). An architect who proposes a smaller model before trying these is paying for speed with quality when it could have been had for free.

Which lever does this latency problem call for?

What is too slow?
  • Wait before anything appears
    Stream + cachetrim and cache the prefix
  • Long answers take ages
    Shorten or fast modeoutput length, then speed
  • Nobody waits for it
    Batch APIslower, half price
  • Thinking dominates
    Lower effort or tierprove quality holds first
Start from the symptom. Only the last branch trades accuracy away, and it should be backed by an eval.

Paid-for speed: levers that can cost accuracy

Effort is usually the first of these to try. It governs every output token — text, tool calls and thinking — and defaults to high. The effort docs describe lower effort as combining operations into fewer tool calls and skipping preamble, and higher effort as more tool calls, more planning and more thinking. Sonnet 5 at medium is described as comparable to Sonnet 4.6 at high, and low is recommended for high-volume or latency-sensitive work. Two cautions: effort is behavioural, not a hard budget, and on Opus 5 the docs note that lowering effort does not reliably shorten responses — ask for length in the prompt as well.

Model tier is the bigger step. The models overview lists comparative latency from Fable 5.1 (slower) through Opus 5 (moderate) and Sonnet 5 (fast) to Haiku 4.5 (fastest). Moving down a tier is justified when an eval shows the smaller model still meets the bar on the traffic it will serve (selection is covered in 2.1). Routing combines both: send routine requests to a fast configuration and escalate hard ones to a slower, stronger one, so the average is fast and the hard tail is still right.

Some additions do the opposite: buy accuracy with time. Retrieving more chunks, adding a verification pass, or fanning work out to several agents usually raise quality and always add latency and cost. Each should earn its place with a measured improvement, just as each speed-up must show it did not break quality.

Measure each candidate on the same eval: quality, TTFT, total timepython
import time, statistics

def run(config, case):
    start = time.perf_counter(); ttft = None
    with client.messages.stream(max_tokens=2000, messages=case.messages,
                                **config) as stream:
        for _ in stream.text_stream:
            ttft = ttft or time.perf_counter() - start   # first visible token
        msg = stream.get_final_message()
    return grade(case, msg), ttft, time.perf_counter() - start, msg.usage

CONFIGS = {
    "sonnet-high": {"model": "claude-sonnet-5"},
    "sonnet-low":  {"model": "claude-sonnet-5", "output_config": {"effort": "low"}},
    "haiku":       {"model": "claude-haiku-4-5"},
}
for name, cfg in CONFIGS.items():
    rows = [run(cfg, c) for c in EVAL_CASES for _ in range(3)]   # 3 trials each
    totals = sorted(r[2] for r in rows)
    print(name,
          "pass", statistics.mean(r[0] for r in rows),
          "p95 total", totals[int(0.95 * len(totals)) - 1],
          "median ttft", statistics.median(r[1] for r in rows))

Justifying the decision

A configuration is justified when a reviewer can see the targets, the alternatives, the evidence and the cost of the choice. Anthropic’s evals post supplies the vocabulary: run each task for several trials, because outputs vary; grade with code where you can and with a model or human where you must; and track latency, tokens and cost per task alongside quality. It also distinguishes pass@k (at least one of k tries succeeds) from pass^k (all k succeed) — for a customer-facing path, consistency is what matters, so pass^k is the honest measure. And it recommends reading transcripts: a configuration that is fast because it skips a tool call it needed will look fine on latency and wrong in the transcript.

Checking a configuration decision record

  • Passes: Targets stated as quality bar and p95 latency
  • Passes: Latency type named: TTFT or totalTTFT for voice
  • Passes: At least three candidates on one eval set
  • Check: Multiple trials per case; consistency reportedone trial only
  • Passes: Cost per task for each candidate
  • Passes: What was given up, and for which traffic
  • Fails: Latency reported as percentilesmean only
  • Missing: Triggers to re-run the sweep
A draft record under review. Most items pass, but the usual gaps would send it back: a single trial, averages instead of percentiles, and no trigger for re-evaluation.

Traps the wrong answers are built from

Tempting but wrongDo this instead
Treating latency as one numberSpecify TTFT or total time, at p95, and pick levers that act on that metric.
Dropping to a smaller model as the first speed fixStream, cache, trim and parallelise first; then test lower effort; then a smaller tier.
Justifying a configuration by benchmark or intuitionCompare candidates on your own eval with several trials, latency percentiles and cost.
One configuration for all trafficRoute routine and hard requests, and send work nobody waits for to batch.
Cutting max_tokens to force speedAsk for shorter output; the docs call max_tokens a blunt limit that can cut answers mid-sentence.

You should now be able to

  • Distinguish time to first token from total latency and state targets as percentiles.
  • Map each configuration lever to its effect on latency, accuracy and cost.
  • Apply accuracy-neutral levers (streaming, caching, trimming, parallelism) before accuracy-reducing ones.
  • Use effort, model tier and routing to trade accuracy for speed only where evals allow.
  • Run a configuration sweep with multiple trials and report quality, latency and cost together.
  • Write a decision record that states targets, alternatives, evidence and re-evaluation triggers.

Practice questions

Original questions written for this lesson, in the exam’s style. Answer first, then open the reasoning — every option is explained, including why the wrong ones are tempting.

  1. Question 1

    A wealth-management firm’s advisers use a chat assistant that answers from a 30,000-token product guide. Answers are accurate, but advisers complain that nothing appears for three seconds. Total answer time is acceptable to them.

    Which change best addresses the complaint without risking accuracy?

    1. AMove to Haiku 4.5, the fastest model in the line-up.
    2. BCap max_tokens at 200 so responses finish sooner.
    3. CStream the response and cache the product guide prefix.
    4. DEnable fast mode to raise output tokens per second.
    Show answer and reasoning
    1. AIncorrect. It may reduce latency but risks the accuracy that is currently meeting the bar, and cheaper levers have not been tried.
    2. BIncorrect. Total time is not the complaint, and a hard cap can cut answers off mid-sentence.
    3. CCorrect. The problem is time to first token; streaming and caching act on it directly and leave the model’s output unchanged.
    4. DIncorrect. Fast mode does not improve time to first token, which is what advisers are waiting on.
  2. Question 2

    An architect must justify the configuration for a customer-facing claims-status agent to a review board. Three candidates have been tested: Opus 5 at high, Sonnet 5 at medium, and Haiku 4.5.

    Which two pieces of evidence most strengthen the justification? (Select 2.)

    1. APass rates from several trials per case, reporting how consistently each candidate succeeds.
    2. Bp95 latency and cost per task for each candidate on the same eval set.
    3. CPublic benchmark scores showing which model ranks highest.
    4. DMean latency from a single run of each candidate.
    5. EA statement that the newest model is generally the most accurate.
    Show answer and reasoning
    1. ACorrect. Outputs vary; for a customer-facing path, consistency across trials (pass^k) is the honest quality measure.
    2. BCorrect. The trade-off is only visible when quality, tail latency and cost are measured together on identical inputs.
    3. CIncorrect. Benchmarks do not reflect this system’s prompts, data or latency path.
    4. DIncorrect. Averages hide the slow tail that breaks SLAs, and one run hides variability.
    5. EIncorrect. Newness is not evidence about this workload.
  3. Question 3

    A research team’s agent runs Opus 5 at max effort and takes 20 minutes per report. Reports are read the next morning, and the finance team wants lower cost without lower quality. What is the best change?

    1. ALower effort to low so each report finishes in a few minutes.
    2. BRun the reports through the Batch API at the same model and effort.
    3. CEnable fast mode so the reports complete overnight more quickly.
    4. DSwitch to Haiku 4.5, since the reports are not time-sensitive.
    Show answer and reasoning
    1. AIncorrect. Nobody needs the report sooner, and lowering effort risks the quality the team wants to keep.
    2. BCorrect. Latency is not a constraint, so the asynchronous 50% discount cuts cost with no change to the output.
    3. CIncorrect. Fast mode costs more per token and is not available on the Batch API; speed has no value here.
    4. DIncorrect. The lack of urgency argues for batching, not for a weaker model that may lower quality.
  4. Question 4

    A payments company’s dispute assistant must return a structured decision within 8 seconds at p95. Sonnet 5 at high meets accuracy but has a p95 of 11 seconds, mostly thinking time. Sonnet 5 at low has a p95 of 5 seconds but fails multi-currency disputes, 6% of traffic. On the eval, medium effort handles those correctly with a p95 of 7 seconds.

    Which configuration is best justified?

    1. ASonnet 5 at low for everything, accepting the multi-currency failures.
    2. BSonnet 5 at high for everything, and ask the business to relax the SLA.
    3. COpus 5 at max for everything, since accuracy matters most in payments.
    4. DRoute multi-currency cases to medium, the rest to low, then re-measure p95.
    Show answer and reasoning
    1. AIncorrect. It meets the latency target by knowingly failing a measurable slice of decisions.
    2. BIncorrect. Possible as a negotiation, but it ignores a configuration that meets both targets.
    3. CIncorrect. More thinking lengthens the path that is already too slow.
    4. DCorrect. Routing keeps the fast path for most traffic and uses the tested medium path where low failed; re-measuring confirms the blended p95 still meets the target.

Sources

Drafted with AI assistance and checked against the sources above; expert review is in progress. Spotted an error? Tell us and it gets fixed, dated and listed on how this is written.