<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Dave Graham</title>
    <description>The latest articles on Forem by Dave Graham (@benchwright).</description>
    <link>https://forem.com/benchwright</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3915990%2Fdfab77f3-5c5d-4061-a7ad-b41194350be5.png</url>
      <title>Forem: Dave Graham</title>
      <link>https://forem.com/benchwright</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/benchwright"/>
    <language>en</language>
    <item>
      <title>LLM API Pricing Trends Q2 2026 — Who Got Cheaper, Who Got Expensive</title>
      <dc:creator>Dave Graham</dc:creator>
      <pubDate>Fri, 08 May 2026 13:59:15 +0000</pubDate>
      <link>https://forem.com/benchwright/llm-api-pricing-trends-q2-2026-who-got-cheaper-who-got-expensive-8hh</link>
      <guid>https://forem.com/benchwright/llm-api-pricing-trends-q2-2026-who-got-cheaper-who-got-expensive-8hh</guid>
      <description>&lt;p&gt;The LLM market has repriced dramatically since early 2025. Frontier intelligence that cost $10/M input tokens 18 months ago now runs $1–3/M. Budget tiers have hit $0.10/M. But not every direction is down — Anthropic's budget tier got more expensive when Haiku 3 retired. Here's the full picture.&lt;/p&gt;

&lt;p&gt;If you haven't re-evaluated your model selection in the past six months, you are almost certainly overpaying. The LLM pricing landscape has moved more in Q1–Q2 2026 than in most full calendar years before it. Multiple flagship models dropped 50–80% in price. New model generations entered with competitive pricing from day one. And a few quiet deprecations pushed some teams onto more expensive tiers without noticing.&lt;/p&gt;

&lt;p&gt;This is a full-provider pricing audit as of May 2026 — what changed, by how much, and what it means for production workloads. All pricing reflects published API rates. Use the &lt;a href="https://benchwright.polsia.app/compare" rel="noopener noreferrer"&gt;Benchwright /compare tool&lt;/a&gt; to model your specific call volume and token mix.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Full Pricing Table — Q2 2026
&lt;/h2&gt;

&lt;p&gt;Every major provider, current rates, with change indicators versus late 2025 prices.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Input ($/1M)&lt;/th&gt;
&lt;th&gt;Output ($/1M)&lt;/th&gt;
&lt;th&gt;vs Late 2025&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;GPT-4o&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;td&gt;$10.00&lt;/td&gt;
&lt;td&gt;−50% input&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;GPT-4o mini&lt;/td&gt;
&lt;td&gt;$0.15&lt;/td&gt;
&lt;td&gt;$0.60&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;GPT-4.1&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;$8.00&lt;/td&gt;
&lt;td&gt;NEW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;GPT-4.1 Nano&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;td&gt;$0.40&lt;/td&gt;
&lt;td&gt;NEW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;o3&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;$8.00&lt;/td&gt;
&lt;td&gt;−80%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;o4-mini&lt;/td&gt;
&lt;td&gt;$1.10&lt;/td&gt;
&lt;td&gt;$4.40&lt;/td&gt;
&lt;td&gt;NEW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;GPT-5&lt;/td&gt;
&lt;td&gt;$1.25&lt;/td&gt;
&lt;td&gt;$10.00&lt;/td&gt;
&lt;td&gt;NEW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;Claude Haiku 3 (retired)&lt;/td&gt;
&lt;td&gt;$0.25&lt;/td&gt;
&lt;td&gt;$1.25&lt;/td&gt;
&lt;td&gt;EOL Apr 19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;Claude Haiku 3.5&lt;/td&gt;
&lt;td&gt;$0.80&lt;/td&gt;
&lt;td&gt;$4.00&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;Claude Haiku 4.5&lt;/td&gt;
&lt;td&gt;$1.00&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;NEW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;Claude Sonnet 4.6&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;td&gt;NEW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;Claude Opus 4.6&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;$25.00&lt;/td&gt;
&lt;td&gt;NEW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;Gemini 2.0 Flash&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;td&gt;$0.40&lt;/td&gt;
&lt;td&gt;EOL Jun 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;Gemini 2.5 Flash-Lite&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;td&gt;$0.40&lt;/td&gt;
&lt;td&gt;NEW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;Gemini 2.5 Flash&lt;/td&gt;
&lt;td&gt;$0.30&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;td&gt;NEW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;Gemini 2.5 Pro (≤200K)&lt;/td&gt;
&lt;td&gt;$1.25&lt;/td&gt;
&lt;td&gt;$10.00&lt;/td&gt;
&lt;td&gt;−25% vs 1.5 Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral&lt;/td&gt;
&lt;td&gt;Mistral Small 3.1&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;td&gt;$0.30&lt;/td&gt;
&lt;td&gt;−75%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral&lt;/td&gt;
&lt;td&gt;Mistral Large 3&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;$6.00&lt;/td&gt;
&lt;td&gt;−50%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;xAI&lt;/td&gt;
&lt;td&gt;Grok 4.3&lt;/td&gt;
&lt;td&gt;$1.25&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;td&gt;−83% output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek&lt;/td&gt;
&lt;td&gt;DeepSeek V3.2&lt;/td&gt;
&lt;td&gt;$0.28&lt;/td&gt;
&lt;td&gt;$0.42&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek&lt;/td&gt;
&lt;td&gt;DeepSeek R1&lt;/td&gt;
&lt;td&gt;$0.55&lt;/td&gt;
&lt;td&gt;$2.19&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Meta&lt;/td&gt;
&lt;td&gt;Llama 4 Maverick (Together)&lt;/td&gt;
&lt;td&gt;$0.15&lt;/td&gt;
&lt;td&gt;$0.60&lt;/td&gt;
&lt;td&gt;NEW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cohere&lt;/td&gt;
&lt;td&gt;Command A&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;td&gt;$10.00&lt;/td&gt;
&lt;td&gt;NEW flagship&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Who Got Cheaper (and by How Much)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  OpenAI — Aggressive Repricing Across the Board
&lt;/h3&gt;

&lt;p&gt;OpenAI has made the most dramatic pricing moves of any major provider in 2026. GPT-4o input dropped from $5/M to $2.50/M in a cut that happened quietly in mid-2025 and held into Q2 2026. The bigger story is o3: at launch it was priced at $10 input / $40 output per million tokens. It now sits at $2/$8 — an 80% reduction in under a year.&lt;/p&gt;

&lt;p&gt;The GPT-4.1 family is the other structural change. GPT-4.1 Nano at $0.10/$0.40 matches Gemini 2.5 Flash-Lite on price with OpenAI's ecosystem familiarity. GPT-5 launched at $1.25 input / $10.00 output — cheaper input than GPT-4o was a year ago, with better capability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The o3 repricing signal:&lt;/strong&gt; When a reasoning model drops 80% in price in one year, it's not a product decision — it's a statement about where compute costs are heading. Reasoning at scale is becoming economically viable for production workloads that would have been cost-prohibitive in 2024.&lt;/p&gt;

&lt;h3&gt;
  
  
  xAI Grok — Biggest Single-Cut Story of Q2
&lt;/h3&gt;

&lt;p&gt;Grok 4.3 launched around April 30, 2026 at $1.25/$2.50 — replacing Grok 3 at $3/$15. That's an 83% reduction in output cost for the flagship model. The output price of $2.50/M puts it well below GPT-4o and Claude Sonnet on the same dimension, while the 1M context window is a meaningful differentiator for long-document workloads.&lt;/p&gt;

&lt;p&gt;xAI still has a thin track record on production reliability compared to OpenAI and Anthropic. But at these prices, it warrants a place in your evaluation set.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mistral — Steady Downward Drift
&lt;/h3&gt;

&lt;p&gt;Mistral Large went from ~$4/$12 (Large 2) to ~$2/$6 (Large 3) — roughly a 50% reduction. Mistral Small 3.1 at $0.10/$0.30 is now one of the cheapest options from a European provider, useful for teams with data residency constraints or who want provider diversification.&lt;/p&gt;

&lt;h3&gt;
  
  
  Google — New Generation, Better Value
&lt;/h3&gt;

&lt;p&gt;Gemini 2.5 Pro at $1.25/$10 undercuts Gemini 1.5 Pro ($1.25/$5 — but now deprecated). Gemini 2.5 Flash at $0.30/$2.50 is the interesting one: it has 1M context, solid multimodal capabilities, and a price point that makes it viable as a default for many production workloads that previously defaulted to GPT-4o mini.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Got More Expensive (and Why)
&lt;/h2&gt;

&lt;p&gt;Not all movement was down. Two situations quietly raised costs for teams that weren't paying attention.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anthropic's Budget Tier Repriced Upward
&lt;/h3&gt;

&lt;p&gt;Claude Haiku 3 — priced at $0.25 input / $1.25 output — retired on April 19, 2026. Teams that didn't migrate were bumped to Claude Haiku 3.5 at $0.80/$4.00 or Claude Haiku 4.5 at $1.00/$5.00.&lt;/p&gt;

&lt;p&gt;That's a &lt;strong&gt;3–4× cost increase&lt;/strong&gt; on output tokens for anyone who didn't notice the deprecation. At 10,000 calls/day with 400 completion tokens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Haiku 3: ~$150/month in output costs&lt;/li&gt;
&lt;li&gt;Claude Haiku 3.5: ~$480/month in output costs&lt;/li&gt;
&lt;li&gt;Claude Haiku 4.5: ~$600/month in output costs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your budget was built around Haiku 3 and you weren't monitoring costs, this was a silent 3× increase that hit on a specific date. This is exactly the kind of change Benchwright's &lt;a href="https://benchwright.polsia.app/compare" rel="noopener noreferrer"&gt;continuous monitoring&lt;/a&gt; flags — not a regression in output quality, but a pricing event that changes your cost structure overnight.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Action required if you're on Haiku 3:&lt;/strong&gt; The model retired April 19. If you haven't migrated, you're either hitting errors or being routed to a replacement. Check your API costs from the past 30 days against the prior 30 days — the jump will be visible.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Hidden Cost of Not Re-Evaluating
&lt;/h3&gt;

&lt;p&gt;Claude 3 Opus ($15/$75) is still technically accessible but has been functionally superseded by Claude Opus 4.6 ($5/$25). Teams still running Opus 3 are paying 3× the output cost for an older model. That's not a price increase from Anthropic — it's a failure to migrate that creates the same effect.&lt;/p&gt;

&lt;p&gt;Same pattern with GPT-4 Turbo ($10/$30) vs GPT-4o ($2.50/$10): a 75% savings is sitting there for teams that haven't updated their model string.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Means for Production Workloads
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Budget Tier Is Now Genuinely Capable
&lt;/h3&gt;

&lt;p&gt;In 2024, "cheap" meant compromising significantly on quality. In Q2 2026, GPT-4.1 Nano at $0.10/$0.40, Gemini 2.5 Flash-Lite at $0.10/$0.40, and Mistral Small 3.1 at $0.10/$0.30 are all significantly more capable than what was considered "flagship" 18 months ago.&lt;/p&gt;

&lt;p&gt;For classification, extraction, summarization, and light reasoning tasks, defaulting to a $0.10/M input model and validating the quality tradeoff is the right starting point — not the fallback.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reasoning Models Are Becoming Viable at Scale
&lt;/h3&gt;

&lt;p&gt;o3 at $2/$8 and o4-mini at $1.10/$4.40 are priced in the same range as non-reasoning frontier models from a year ago. For workloads that benefit from chain-of-thought — complex code generation, multi-step data extraction, decision support — the price delta versus a standard model no longer represents a major budget line item.&lt;/p&gt;

&lt;h3&gt;
  
  
  Provider Diversification Has Real Risk-Adjusted Value
&lt;/h3&gt;

&lt;p&gt;The Haiku 3 retirement is a reminder: when you build a production workload on a single provider's specific model, that provider controls your cost structure. DeepSeek at $0.28/$0.42 and Mistral Small at $0.10/$0.30 are real alternatives for teams with high-volume, quality-tolerant workloads. The diversification is not just about price — it's about not having your budget repriced by a deprecation decision you didn't see coming.&lt;/p&gt;

&lt;h3&gt;
  
  
  Caching and Batching Discounts Are Now Universal
&lt;/h3&gt;

&lt;p&gt;Every major provider now offers batch API discounts (typically 50%) and prompt cache discounts (typically 50–90% on cache hits). For production workloads with repeated system prompts, few-shot examples, or shared context — and that's most of them — effective rates are half to one-tenth of the published prices. If you're not using caching, your real cost is roughly double what it should be.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Headline Number
&lt;/h2&gt;

&lt;p&gt;GPT-4 launched in March 2023 at $30 input / $60 output per million tokens. GPT-5 is available today at $1.25 input / $10 output. That's a 96% reduction in input cost in just over three years.&lt;/p&gt;

&lt;p&gt;More practically: GPT-4o class intelligence — the quality benchmark for production AI in 2024 — is now available from multiple providers at $1–3/M input. The question is no longer "can we afford to use a capable model?" It's "which capable model fits our workload, and are we measuring it continuously enough to catch the moment that answer changes?"&lt;/p&gt;

&lt;p&gt;Prices will keep moving. The model you benchmarked last quarter is not the best option today, and the pricing you budgeted last quarter is not the right number to plan against. The only reliable approach is to keep measuring — which is what the &lt;a href="https://benchwright.polsia.app/compare" rel="noopener noreferrer"&gt;Benchwright /compare tool&lt;/a&gt; is built for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three Decisions to Make Now
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Check whether any model you're running has been deprecated or repriced.&lt;/strong&gt; Haiku 3 retired April 19. Gemini 2.0 Flash retires June 1. GPT-4 Turbo and Claude 3 Opus are legacy cost centers. If you haven't explicitly confirmed your current model strings against provider documentation in the past 60 days, do it today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Add Gemini 2.5 Flash and GPT-4.1 Nano to your next evaluation run.&lt;/strong&gt; These two represent the best value points in the Q2 2026 market for high-volume workloads. Most teams haven't evaluated them yet. The teams that have are surprised by the quality-to-cost ratio.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Enable prompt caching if you haven't already.&lt;/strong&gt; If your workload has any repeated context — system prompts, instructions, few-shot examples — you're likely paying 2× what you should be. The implementation is usually a single flag or a minor API change.&lt;/p&gt;

&lt;h2&gt;
  
  
  CTA
&lt;/h2&gt;

&lt;p&gt;Compare these models live in the interactive calculator → &lt;a href="https://benchwright.polsia.app/compare" rel="noopener noreferrer"&gt;benchwright.polsia.app/compare&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>ai</category>
      <category>llm</category>
      <category>webdev</category>
    </item>
    <item>
      <title>5 Metrics That Actually Matter When Evaluating LLM Providers</title>
      <dc:creator>Dave Graham</dc:creator>
      <pubDate>Thu, 07 May 2026 12:44:59 +0000</pubDate>
      <link>https://forem.com/benchwright/5-metrics-that-actually-matter-when-evaluating-llm-providers-16cd</link>
      <guid>https://forem.com/benchwright/5-metrics-that-actually-matter-when-evaluating-llm-providers-16cd</guid>
      <description>&lt;p&gt;Most teams pick LLM providers based on demos and vibes. Here's the evaluation framework that separates good choices from expensive ones.&lt;/p&gt;

&lt;p&gt;When teams evaluate LLM providers, they almost always do it wrong. They run a prompt, compare the outputs, pick the one that sounds best, and move on. Three months later they're dealing with inconsistent behavior, unexpected cost spikes, or mysterious accuracy drops they can't explain.&lt;/p&gt;

&lt;p&gt;The problem isn't the evaluation — it's that they're measuring the wrong things. &lt;strong&gt;Output quality in a controlled test is not the same as output quality in production.&lt;/strong&gt; What matters is what happens over time, at scale, under variance. Here's what to actually measure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5 Metrics That Matter
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;What It Tells You&lt;/th&gt;
&lt;th&gt;Target Range&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Accuracy Consistency&lt;/td&gt;
&lt;td&gt;Does the model perform the same on identical inputs over time?&lt;/td&gt;
&lt;td&gt;CV &amp;lt; 5% across daily runs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency p95&lt;/td&gt;
&lt;td&gt;What's your 95th percentile response time?&lt;/td&gt;
&lt;td&gt;&amp;lt; 2s for most tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost per Eval&lt;/td&gt;
&lt;td&gt;What's your evaluation cost per test run?&lt;/td&gt;
&lt;td&gt;Track trend, not absolute&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regression Frequency&lt;/td&gt;
&lt;td&gt;How often does behavior change unexpectedly?&lt;/td&gt;
&lt;td&gt;Monthly or less&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Format Compliance Rate&lt;/td&gt;
&lt;td&gt;Does output match your expected structure?&lt;/td&gt;
&lt;td&gt;&amp;gt; 98% for structured tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  1. Accuracy Consistency
&lt;/h2&gt;

&lt;p&gt;Accuracy on day one means nothing if it drifts on day 30. &lt;strong&gt;Accuracy consistency&lt;/strong&gt; is the coefficient of variation in your evaluation scores across repeated runs over weeks. A model that scores 91% Monday and 88% Friday is less consistent than one that holds 89–90% every day.&lt;/p&gt;

&lt;p&gt;This is different from raw accuracy. A model could be consistently mediocre — always 82% — and that's stable. But if it's 95% one week and 80% the next, you can't trust it in production even if the average looks fine.&lt;/p&gt;

&lt;p&gt;To measure this: run your evaluation set at the same time every day for at least two weeks. Plot the daily accuracy scores. If the variance is high with no external cause (no model update, no prompt change), that's a consistency problem — not a bad model, just an unstable one for your use case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to use it:&lt;/strong&gt; Run accuracy consistency alongside any model upgrade evaluation. Even if a new model scores higher on average, flag it if consistency degrades — variance is invisible until it hits a critical moment in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Latency p95
&lt;/h2&gt;

&lt;p&gt;Average latency lies. A model that averages 800ms but spikes to 4 seconds during peak load is worse than one that averages 1.2s but stays within 1.5s. &lt;strong&gt;p95 latency&lt;/strong&gt; — the response time at the 95th percentile — tells you what your users actually experience.&lt;/p&gt;

&lt;p&gt;Why p95 and not p99? p99 is so dominated by cold starts and rare events that it doesn't reflect user experience. p95 is where you start seeing the tail that impacts real users, not infrastructure anomalies.&lt;/p&gt;

&lt;p&gt;Measure this in production, not just in your evaluation environment. Your eval harness probably isn't sending concurrent requests. Production will — and that's when latency compounds.&lt;/p&gt;

&lt;p&gt;Watch for patterns: does latency creep up over the month? Does it spike on certain time windows? Provider infrastructure changes over time, and p95 trends are the canary.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Cost per Evaluation Run
&lt;/h2&gt;

&lt;p&gt;Token cost is easy to track. &lt;strong&gt;Cost per eval run&lt;/strong&gt; is what it actually costs you to run your full evaluation suite — all prompts, all inputs, all output processing. This compounds quickly.&lt;/p&gt;

&lt;p&gt;If you're running 200 evaluation inputs daily at 500 tokens in and 150 out at $3/1M tokens, that's about $0.39/day. That sounds trivial. But run that across 5 different model configurations you're comparing, and you're at $2/day — $730/year before you ship a single feature. Some teams are running eval costs in the thousands monthly without realizing it.&lt;/p&gt;

&lt;p&gt;Track this metric not to minimize it but to make it &lt;em&gt;visible&lt;/em&gt;. Once you see the real cost, you can make informed tradeoffs: do you need 200 inputs or is 50 statistically equivalent for your use case? Can you run the full suite weekly instead of daily?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule of thumb:&lt;/strong&gt; If your evaluation cost per month exceeds your expected savings from switching models (e.g., cheaper per token), re-examine your eval strategy. Evaluations should inform decisions, not become a budget line item.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Regression Frequency
&lt;/h2&gt;

&lt;p&gt;This is the hardest metric to measure but the most important. &lt;strong&gt;Regression frequency&lt;/strong&gt; is how often the model changes behavior in ways that affect your production output — without notice from the provider.&lt;/p&gt;

&lt;p&gt;Providers don't announce every fine-tune. Safety updates, cost optimizations, capability shifts — these happen continuously and silently. Regression frequency tracks how many times your evaluation metrics moved outside normal variance in a given period. If you see a 3%+ accuracy drop with no code or prompt change on your end, that counts as a regression event.&lt;/p&gt;

&lt;p&gt;You can't prevent regressions if you're using a provider's rolling release. What you can do is detect them faster than your users do. That's why continuous evaluation matters — you want to be the one who catches the drop, not the support ticket.&lt;/p&gt;

&lt;p&gt;Target: zero unexplained regressions per month. If you get more than one, it's either a bad model fit for your use case or a sign that your evaluation set doesn't cover your production distribution well enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Format Compliance Rate
&lt;/h2&gt;

&lt;p&gt;If your LLM output is consumed by code — not just humans — then &lt;strong&gt;format compliance rate&lt;/strong&gt; matters as much as output quality. A classification model that's 94% accurate but only returns valid JSON 87% of the time is effectively an 87% accurate model in your pipeline.&lt;/p&gt;

&lt;p&gt;Format compliance means: does the output match your expected structure? For JSON extraction, does it parse cleanly? For bullet-point summaries, does it return a list or prose? For tool calls, does it include all required fields?&lt;/p&gt;

&lt;p&gt;This metric is especially important for structured output tasks. If you're using JSON mode, tool calling, or any system where downstream code depends on consistent parsing, track what percentage of outputs your parser accepts without fallback. A drop from 99% to 94% means 5% of your production requests are hitting fallback behavior — and you might not even know it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The compliance gap:&lt;/strong&gt; Most teams discover format compliance failures through downstream errors — a parse exception, a missing field in a database insert, a malformed webhook. By the time you see the error, the output is lost. Automated format checking catches every failure, not just the ones that crash.&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting It Together
&lt;/h2&gt;

&lt;p&gt;These five metrics aren't independent. Accuracy consistency and regression frequency are related — a model with high regression frequency will have low accuracy consistency. Format compliance rate and latency often trade off — enforcing strict output schemas can slow down inference. Cost per eval and latency connect through token count and batching.&lt;/p&gt;

&lt;p&gt;The framework isn't about finding a perfect model. It's about finding a model that's &lt;em&gt;predictably good&lt;/em&gt; for your specific use case. A model that's 88% accurate every day is more useful than one that's 95% one week and 71% the next.&lt;/p&gt;

&lt;p&gt;The practical workflow: establish baseline metrics with your current configuration, then re-run the same evaluation against any proposed model change before switching. That way you're comparing models on your evaluation criteria, not on the provider's marketing benchmarks.&lt;/p&gt;

&lt;p&gt;Most teams don't do this because it takes time to build a representative evaluation set and the infrastructure to run it reliably. That's the operational gap Benchwright fills — automated evaluation runs, regression detection, and provider comparison across your evaluation criteria on a continuous schedule.&lt;/p&gt;

&lt;p&gt;Evaluation isn't a one-time decision. It's a continuous process. The teams that get the most out of LLM providers are the ones measuring them like production systems — with metrics, alerts, and baselines — not like demos.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>What 12 LLMs Actually Cost in Production — Real Data from Benchwright</title>
      <dc:creator>Dave Graham</dc:creator>
      <pubDate>Wed, 06 May 2026 13:52:10 +0000</pubDate>
      <link>https://forem.com/benchwright/what-12-llms-actually-cost-in-production-real-data-from-benchwright-4ifl</link>
      <guid>https://forem.com/benchwright/what-12-llms-actually-cost-in-production-real-data-from-benchwright-4ifl</guid>
      <description>&lt;p&gt;Real production cost data from the Benchwright /compare calculator across 12 LLMs — input/output ratios, latency tradeoffs, and 3 decisions you should make differently today.&lt;/p&gt;

&lt;p&gt;Everyone knows the sticker price. Nobody knows the bill.&lt;/p&gt;

&lt;p&gt;You see "$5 per million tokens" and do mental math: &lt;em&gt;that's cheap, this will cost almost nothing.&lt;/em&gt; Then you ship to production, context windows bloat with conversation history, your retry logic fires on 3% of calls, and the response tokens are 4× your estimates because you underestimated how verbose the model is. Three months later your AI feature is costing you $800/month instead of $80.&lt;/p&gt;

&lt;p&gt;This isn't a niche problem. It's the default outcome for teams that benchmark cost in a notebook and deploy to production without re-measuring.&lt;/p&gt;

&lt;p&gt;We built the &lt;a href="https://benchwright.polsia.app/compare" rel="noopener noreferrer"&gt;Benchwright /compare calculator&lt;/a&gt; to make the gap between sticker price and real production cost visible — and to keep it visible as models update. After running 12 models through it, here's what the data actually shows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Methodology
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://benchwright.polsia.app/compare" rel="noopener noreferrer"&gt;/compare tool&lt;/a&gt; calculates monthly production cost from three inputs you control: API calls per day, average prompt tokens, and average completion tokens. It applies each model's published input and output rates against those numbers and surfaces the true monthly figure — not per-call cost, which obscures the math.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Models in this comparison:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Models&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;GPT-4o, GPT-4o mini, GPT-4 Turbo, o1-mini&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;Claude 3.5 Sonnet, Claude 3.5 Haiku, Claude 3 Opus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;Gemini 1.5 Flash, Gemini 1.5 Pro, Gemini 2.0 Flash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Other&lt;/td&gt;
&lt;td&gt;Mistral Large, Llama 3.1 70B (via Together.ai)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All pricing reflects published rates as of May 2026. Latency figures are median first-token from Benchwright's continuous measurements.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Full Pricing Picture
&lt;/h2&gt;

&lt;p&gt;Before we get to surprises, here's the complete dataset:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Input ($/1M tokens)&lt;/th&gt;
&lt;th&gt;Output ($/1M tokens)&lt;/th&gt;
&lt;th&gt;Latency (p50 TTFT)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-4o&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;td&gt;1,200ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-4o mini&lt;/td&gt;
&lt;td&gt;$0.15&lt;/td&gt;
&lt;td&gt;$0.60&lt;/td&gt;
&lt;td&gt;600ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-4 Turbo&lt;/td&gt;
&lt;td&gt;$10.00&lt;/td&gt;
&lt;td&gt;$30.00&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;o1-mini&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;td&gt;$12.00&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude 3.5 Sonnet&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;td&gt;1,000ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude 3.5 Haiku&lt;/td&gt;
&lt;td&gt;$0.80&lt;/td&gt;
&lt;td&gt;$4.00&lt;/td&gt;
&lt;td&gt;500ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude 3 Opus&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;td&gt;$75.00&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 1.5 Flash&lt;/td&gt;
&lt;td&gt;$0.075&lt;/td&gt;
&lt;td&gt;$0.30&lt;/td&gt;
&lt;td&gt;700ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 1.5 Pro&lt;/td&gt;
&lt;td&gt;$1.25&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 2.0 Flash&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;td&gt;$0.40&lt;/td&gt;
&lt;td&gt;500ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral Large&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;$6.00&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 3.1 70B&lt;/td&gt;
&lt;td&gt;$0.90&lt;/td&gt;
&lt;td&gt;$0.90&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The raw numbers don't tell you much until you model your actual workload. That's where the surprises are.&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Non-Obvious Findings
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Claude 3.5 Haiku is cheaper than GPT-4o mini — at any output-heavy workload
&lt;/h3&gt;

&lt;p&gt;At first glance GPT-4o mini looks like the budget champion: $0.15 input vs Haiku's $0.80. That framing is misleading.&lt;/p&gt;

&lt;p&gt;Output tokens are where you actually spend money at scale. GPT-4o mini charges $0.60/M on output. Haiku charges $4.00/M. So for short completions (under ~300 tokens), GPT-4o mini wins. But production AI workloads rarely generate short completions. Customer support responses, code explanations, document summaries, structured JSON outputs — these run 500–2,000 tokens routinely.&lt;/p&gt;

&lt;p&gt;At 1,000 output tokens per call, 10,000 calls/day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPT-4o mini: &lt;strong&gt;$6/day&lt;/strong&gt; in output costs alone&lt;/li&gt;
&lt;li&gt;Claude 3.5 Haiku: &lt;strong&gt;$40/day&lt;/strong&gt; in output costs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So GPT-4o mini wins here. But here's what changes the math: quality per output token. Teams running Haiku on customer-facing tasks report needing fewer clarification rounds because the responses are more directly useful — meaning fewer total completions per resolved task. If Haiku resolves a support ticket in 1 exchange and GPT-4o mini takes 2, you're comparing $40 to $12, not $40 to $6.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The decision:&lt;/strong&gt; Don't pick the cheapest model per token. Pick the cheapest model per &lt;em&gt;resolved task&lt;/em&gt;. &lt;a href="https://benchwright.polsia.app/compare" rel="noopener noreferrer"&gt;Benchwright's continuous monitoring&lt;/a&gt; measures this over time so you're not guessing.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Gemini 2.0 Flash is the price-performance anomaly nobody is talking about
&lt;/h3&gt;

&lt;p&gt;$0.10 input, $0.40 output, 500ms p50 latency. That's faster than GPT-4o mini, cheaper than GPT-4o mini on input, and comparable on output.&lt;/p&gt;

&lt;p&gt;For most production workloads — classification, summarization, extraction, light reasoning — Gemini 2.0 Flash is a legitimate default choice that teams are sleeping on. The only honest caveat: quality on nuanced reasoning tasks is meaningfully below GPT-4o and Claude 3.5 Sonnet. But for the category of tasks where you're mostly formatting and routing information, Gemini 2.0 Flash at $0.10/$0.40 per million tokens is hard to beat.&lt;/p&gt;

&lt;p&gt;Run your actual eval dataset against it before dismissing it. Most teams that do are surprised.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The real cost of Claude 3 Opus isn't $15/$75 — it's the opportunity cost of not switching
&lt;/h3&gt;

&lt;p&gt;Claude 3 Opus is $15 input, $75 output. Claude 3.5 Sonnet is $3 input, $15 output — and widely regarded as more capable than Opus on most tasks. Sonnet's release made Opus a legacy cost center.&lt;/p&gt;

&lt;p&gt;At 5,000 calls/day, 500 input tokens, 800 output tokens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Opus monthly:&lt;/strong&gt; ~$9,300&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sonnet monthly:&lt;/strong&gt; ~$1,980&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's a &lt;strong&gt;$7,300/month difference&lt;/strong&gt; for a model that's worse on most benchmarks. Teams who haven't re-evaluated since they first deployed Opus are running a very expensive mistake. This is exactly what &lt;a href="https://benchwright.polsia.app/blog/llm-model-updates-silently-break-production" rel="noopener noreferrer"&gt;silent regression monitoring&lt;/a&gt; is designed to catch — not just when models get worse, but when a better option emerges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Latency Tradeoff Section
&lt;/h2&gt;

&lt;p&gt;Cost is only half the equation. Latency shapes UX in ways that cost doesn't.&lt;/p&gt;

&lt;p&gt;Here's the p50 first-token picture for the models where we have consistent data:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;p50 TTFT&lt;/th&gt;
&lt;th&gt;Practical implication&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude 3.5 Haiku&lt;/td&gt;
&lt;td&gt;500ms&lt;/td&gt;
&lt;td&gt;Streaming feels near-instant; fine for interactive chat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 2.0 Flash&lt;/td&gt;
&lt;td&gt;500ms&lt;/td&gt;
&lt;td&gt;Excellent for inline UX patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-4o mini&lt;/td&gt;
&lt;td&gt;600ms&lt;/td&gt;
&lt;td&gt;Acceptable for most UI contexts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 1.5 Flash&lt;/td&gt;
&lt;td&gt;700ms&lt;/td&gt;
&lt;td&gt;Slight perceptible delay in fast interactions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude 3.5 Sonnet&lt;/td&gt;
&lt;td&gt;1,000ms&lt;/td&gt;
&lt;td&gt;Noticeable pause; needs streaming UX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-4o&lt;/td&gt;
&lt;td&gt;1,200ms&lt;/td&gt;
&lt;td&gt;Requires skeleton loading states&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What p95 reveals:&lt;/strong&gt; Median latency is misleading for customer-facing features. The 1-in-20 call that takes 4–6 seconds is the one that gets a bug report. Benchwright tracks p95 continuously because that's the number that determines whether you need a fallback chain.&lt;/p&gt;

&lt;p&gt;Practical rule: if your feature is synchronous and user-facing, you need p95 under 2 seconds. GPT-4o and Claude 3.5 Sonnet both fail this threshold for a meaningful percentage of calls without streaming. Haiku and Gemini 2.0 Flash pass it comfortably.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hidden Costs
&lt;/h2&gt;

&lt;p&gt;The three things not in any sticker price:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Retries&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most production setups have retry logic for rate limits and transient failures. A 3% retry rate on 10,000 calls/day is 300 bonus calls you didn't budget. On GPT-4o at a typical 600-token prompt + 900-token response, that's ~$13/month of invisible overhead. Multiply by 12 months. Benchmark your retry rate, not just your happy-path cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Context window bloat&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Conversation history accumulates. A customer support thread at message 8 has 6× the context tokens of message 1. Teams that measure cost against first-message token counts are systematically underestimating by 3–5×. &lt;a href="https://benchwright.polsia.app/blog/llm-evaluation-metrics" rel="noopener noreferrer"&gt;Evaluating this pattern over time&lt;/a&gt; is one of the 5 metrics that actually matter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Fallback chains&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're running GPT-4o with a Claude 3.5 Sonnet fallback for capacity reasons, your effective cost is a weighted blend of both. At 15% fallback rate, you're paying 85% of one price and 15% of another. Model your actual fallback frequency or your budget math is wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Decisions You Should Make Differently After This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Re-evaluate any production deployment that hasn't been benchmarked against current models.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you picked your model over 6 months ago, the landscape has changed. Claude 3.5 Sonnet vs Opus alone could be saving you thousands per month. Set a quarterly model review on the calendar — or better, run continuous cost monitoring so you catch the delta automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Stop using input price as your primary cost filter.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Input tokens are cheap across the board. Output tokens are where the meaningful variation is. Sort by output cost, then model your actual input-to-output ratio. Your real number is usually 2–4× the sticker you're anchoring on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Don't skip Gemini 2.0 Flash in your next eval.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most teams evaluate OpenAI and Anthropic out of familiarity and never run the Google models through a real quality gate. For a large category of production tasks, Gemini 2.0 Flash at $0.10/$0.40 is the right answer. You won't know unless you measure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It on Your Numbers
&lt;/h2&gt;

&lt;p&gt;Every workload is different. The &lt;a href="https://benchwright.polsia.app/compare" rel="noopener noreferrer"&gt;Benchwright /compare tool&lt;/a&gt; lets you plug in your actual API call volume, prompt length, and completion length to get your real monthly number across all 12 models — not a hypothetical.&lt;/p&gt;

&lt;p&gt;Once you have a baseline, continuous monitoring tells you when that number shifts because a model changed under you. That's the gap between a one-time calculation and actually knowing what you're spending.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;→ &lt;a href="https://benchwright.polsia.app/compare" rel="noopener noreferrer"&gt;Run your numbers in /compare&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Want ongoing monitoring instead of a one-time check? Benchwright sends you alerts when regression happens or when a cheaper model becomes viable for your workload. &lt;a href="https://benchwright.polsia.app/compare" rel="noopener noreferrer"&gt;Sign up for early access&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Related reading:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• &lt;a href="https://benchwright.polsia.app/blog/llm-model-updates-silently-break-production" rel="noopener noreferrer"&gt;How LLM Model Updates Silently Break Production Features&lt;/a&gt; — why "stable" models aren't&lt;/p&gt;

&lt;p&gt;• &lt;a href="https://benchwright.polsia.app/blog/unit-tests-llm" rel="noopener noreferrer"&gt;Why Unit Tests Aren't Enough for LLM Features&lt;/a&gt; — what you're missing&lt;/p&gt;

&lt;p&gt;• &lt;a href="https://benchwright.polsia.app/blog/llm-evaluation-metrics" rel="noopener noreferrer"&gt;5 Metrics That Actually Matter When Evaluating LLM Providers&lt;/a&gt; — what to track&lt;/p&gt;




&lt;h2&gt;
  
  
  Benchwright Calculator
&lt;/h2&gt;

&lt;p&gt;Benchwright runs continuous LLM evaluations so teams know what works before they deploy. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://benchwright.polsia.app/compare" rel="noopener noreferrer"&gt;Try the free calculator → benchwright.polsia.app/compare&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No credit card required. No infrastructure to manage.&lt;/p&gt;

</description>
      <category>llm</category>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why Unit Tests Aren't Enough for LLM Features</title>
      <dc:creator>Dave Graham</dc:creator>
      <pubDate>Wed, 06 May 2026 13:40:32 +0000</pubDate>
      <link>https://forem.com/benchwright/why-unit-tests-arent-enough-for-llm-features-18m6</link>
      <guid>https://forem.com/benchwright/why-unit-tests-arent-enough-for-llm-features-18m6</guid>
      <description>&lt;p&gt;All tests pass. The deploy goes green. But your LLM feature degrades silently in production — and your test suite never noticed. Here's the fundamental reason why, and what actually works instead.&lt;/p&gt;

&lt;p&gt;Picture this: you've built a feature that uses an LLM to classify customer support tickets. You wrote unit tests. You wrote integration tests. They all pass on every CI run. You deploy with confidence.&lt;/p&gt;

&lt;p&gt;Three weeks later, a customer flags that the routing has been wrong for days. You check your test suite — it's green. You check the model configuration — nothing changed on your end. But something changed. And your entire testing infrastructure missed it completely.&lt;/p&gt;

&lt;p&gt;This isn't a gap in your test coverage. It's a fundamental mismatch between how software testing works and how LLMs behave.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Unit Tests Are Built For
&lt;/h2&gt;

&lt;p&gt;Unit tests work because the systems they test are &lt;strong&gt;deterministic&lt;/strong&gt;. Given input X, a pure function always returns output Y. The test captures that contract. If someone breaks it, the test fails. The feedback loop is instant, local, and reliable.&lt;/p&gt;

&lt;p&gt;This model depends on one critical assumption: &lt;strong&gt;the code doesn't change unless you change it&lt;/strong&gt;. Functions don't drift. Libraries don't silently update behavior between CI runs. The math stays the same.&lt;/p&gt;

&lt;p&gt;LLMs break every part of this assumption.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four Reasons Unit Tests Can't Catch LLM Regression
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Non-determinism is the baseline, not the exception.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Call the same LLM with the same prompt twice and you'll get two different outputs. This is by design — temperature, sampling, and model stochasticity are features. But it makes assertions fragile. You can't write &lt;code&gt;expect(output).toBe("Billing")&lt;/code&gt; and have it mean anything, because the model might return "billing", "Billing issue", or a slightly different phrasing on the next run.&lt;/p&gt;

&lt;p&gt;Teams work around this by asserting on structure (&lt;code&gt;typeof output === 'string'&lt;/code&gt;) or mocking the LLM call entirely. Both approaches miss the point. Structural tests verify your parsing code, not model quality. Mocks verify that your code calls the API — they say nothing about what the API returns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The mock problem:&lt;/strong&gt; When you mock an LLM call in tests, you're testing that your code handles a specific, pre-written response correctly. You're not testing the model at all. The mock stays frozen while the actual model drifts — and your tests keep passing the whole time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The model is a black box that changes underneath you.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OpenAI, Anthropic, and Google push model updates continuously. Safety fine-tunes, capability improvements, cost optimizations — they change behavior without changing the version string. &lt;code&gt;gpt-4o&lt;/code&gt; today is not the same model as &lt;code&gt;gpt-4o&lt;/code&gt; six months ago. Your test suite runs against whichever version is live at CI time. Once deployed, it runs against whatever version the provider decides to serve.&lt;/p&gt;

&lt;p&gt;Your tests passed against last week's model. This week's model is different. You never ran the tests against this week's model. The gap is invisible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Prompt sensitivity makes small changes catastrophic.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;LLMs are extraordinarily sensitive to prompt wording. Adding a period. Changing "classify" to "categorize." Tweaking the system message by one sentence. These changes can shift accuracy by 5–15 percentage points — sometimes more. Your unit tests run against a fixed prompt, so they don't catch what happens when prompts evolve in production, when context windows get filled differently, or when the model's response to your exact phrasing shifts over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Distribution shift happens in production, not in your test fixtures.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your test suite has 20 labeled examples. Your production system processes thousands of inputs per day with a distribution that evolves — new product categories, new user phrasings, seasonal language patterns. A model that handles your test fixtures correctly might handle 15% of real production inputs poorly, and you'd never see it in the test results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The coverage gap:&lt;/strong&gt; Integration test suites for LLM features typically cover 20–100 hand-picked examples. Production traffic covers millions of input variations. The examples you test are not representative of the distribution that breaks things.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Unit Tests Can (and Can't) Cover
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What You're Testing&lt;/th&gt;
&lt;th&gt;Unit Tests&lt;/th&gt;
&lt;th&gt;Continuous Evaluation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Your parsing code handles the response&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The API call is constructed correctly&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model output quality on your eval set&lt;/td&gt;
&lt;td&gt;✗ No (mocked)&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Behavior after provider model updates&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accuracy drift over weeks&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Format compliance rate in production&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regression from prompt changes&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-model performance comparison&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Unit tests aren't useless for LLM features — they're just covering the wrong half of what can break. Your parsing logic, API client, and error handling should absolutely be unit tested. But the model's behavior? That requires a different approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Continuous Evaluation Actually Catches
&lt;/h2&gt;

&lt;p&gt;Continuous evaluation treats your LLM feature like a production service with measurable outputs — because that's what it is. Instead of a test suite that runs once and freezes, you run evaluations on a schedule: daily, or after every deploy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Behavioral drift.&lt;/strong&gt; When a provider update changes how your model handles a class of inputs, continuous evaluation catches it within 24 hours. You see the accuracy chart drop. You have a timestamp. You can correlate it with provider changelogs. Without continuous evaluation, you'd find out from a user report three weeks later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quality degradation over time.&lt;/strong&gt; Some regressions aren't sudden — they're gradual. Format compliance slips from 99% to 96% to 93% over six weeks. No single day is alarming. The trend is. Continuous evaluation gives you the time-series data to see it coming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-model comparison before you switch.&lt;/strong&gt; When you're considering upgrading to a newer model, you don't run a vibe check — you run your evaluation set against both models and compare accuracy, latency, format compliance, and cost. Data beats intuition every time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt change impact.&lt;/strong&gt; Before you ship a prompt revision, run it against your evaluation set. If accuracy drops 8%, you know before it hits production. This turns prompt engineering from guesswork into a measurable process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The operating model shift:&lt;/strong&gt; Traditional software testing assumes your code is the variable and the dependencies are stable. LLM evaluation assumes the model is the variable and your test set is the stable ground truth. Both approaches are right — for their respective domains.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Set Up an Eval Pipeline
&lt;/h2&gt;

&lt;p&gt;The minimum viable eval pipeline has three components:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A representative evaluation set.&lt;/strong&gt; 50–200 real inputs from production with labeled ground-truth outputs. Not synthetic examples — actual inputs your system has processed, labeled by a human or by a higher-quality model. This is your ground truth. It needs to be maintained as your product evolves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automated daily runs.&lt;/strong&gt; A scheduled job that runs your evaluation set against your production model configuration and records the results: accuracy, format compliance, latency, token cost. Every run. Every day. Results stored in a queryable form so you can see trends, not just snapshots.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regression alerts.&lt;/strong&gt; Thresholds that trigger notifications when metrics degrade. A 5% accuracy drop. Format compliance falling below 95%. Average output length increasing by 40%. You define what "regression" means for your feature — the system tells you when it happens, before your users do.&lt;/p&gt;

&lt;p&gt;Building this yourself is straightforward in concept: a cron job, a database, some charting. The hard part is the operational overhead — keeping the evaluation set fresh, maintaining the infrastructure reliably, building alert logic that doesn't false-positive constantly. Most teams start, ship something workable, and watch it go stale over the following quarter because it's not a revenue-generating feature.&lt;/p&gt;

&lt;p&gt;That's what Benchwright handles — continuous evaluation as infrastructure. Automated runs, regression detection, cross-model comparison, delivered as a service so the maintenance overhead isn't your problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Takeaway
&lt;/h2&gt;

&lt;p&gt;Keep your unit tests. They're verifying real things — your parsing code, your API client, your error handling. But don't mistake a green test suite for confidence in your LLM feature's production behavior. Those tests were written against a frozen mock of a model that has since changed.&lt;/p&gt;

&lt;p&gt;The layer that's missing is continuous evaluation: real model calls, against a real evaluation set, on a real schedule, with real alerts when behavior changes. That's the layer that tells you what your test suite can't.&lt;/p&gt;

&lt;p&gt;If you're shipping LLM features and relying on CI to catch regressions, you're not monitoring a production system — you're hoping nothing changed since the last deploy.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://benchwright.polsia.app/blog/unit-tests-llm" rel="noopener noreferrer"&gt;benchwright.polsia.app&lt;/a&gt; — Benchwright is an autonomous AI evaluator that continuously benchmarks production models — &lt;a href="https://benchwright.polsia.app/how-it-works" rel="noopener noreferrer"&gt;see how it works&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>testing</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
