<?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>DEV Community: Roman Shumyatsky</title>
    <description>The latest articles on DEV Community by Roman Shumyatsky (@romans).</description>
    <link>https://dev.to/romans</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4008890%2F5c791859-54a2-4b4e-9740-b968314761e1.png</url>
      <title>DEV Community: Roman Shumyatsky</title>
      <link>https://dev.to/romans</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/romans"/>
    <language>en</language>
    <item>
      <title>OpenAI cut a model's price 80% and told nobody. It took me 23 days to notice — and I run a price tracker.</title>
      <dc:creator>Roman Shumyatsky</dc:creator>
      <pubDate>Mon, 03 Aug 2026 13:30:02 +0000</pubDate>
      <link>https://dev.to/romans/openai-cut-a-models-price-80-and-told-nobody-it-took-me-23-days-to-notice-and-i-run-a-price-4i35</link>
      <guid>https://dev.to/romans/openai-cut-a-models-price-80-and-told-nobody-it-took-me-23-days-to-notice-and-i-run-a-price-4i35</guid>
      <description>&lt;p&gt;Sometime after July 9th, OpenAI changed the price of GPT-5.6 Luna from &lt;strong&gt;$1.00/$6.00&lt;/strong&gt; per million tokens to &lt;strong&gt;$0.20/$1.20&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's an 80% cut on a current frontier-tier model. There was no announcement. No changelog entry. No email. The pricing page just quietly said something different one day.&lt;/p&gt;

&lt;p&gt;I run a site that tracks LLM API pricing across every major provider. &lt;strong&gt;I didn't notice for 23 days.&lt;/strong&gt; My own tracker kept publishing the old, higher numbers that entire time.&lt;/p&gt;

&lt;p&gt;I want to talk about why, because the reason is more interesting than the mistake.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually moved
&lt;/h2&gt;

&lt;p&gt;Two models in the same family, caught in the same sweep:&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 (was → now)&lt;/th&gt;
&lt;th&gt;Output (was → now)&lt;/th&gt;
&lt;th&gt;Blended&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Luna&lt;/td&gt;
&lt;td&gt;$1.00 → &lt;strong&gt;$0.20&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;$6.00 → &lt;strong&gt;$1.20&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;$2.25 → $0.45&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;−80%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Terra&lt;/td&gt;
&lt;td&gt;$2.50 → &lt;strong&gt;$2.00&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;$15.00 → &lt;strong&gt;$12.00&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;$5.63 → $4.50&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;−20%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Sol&lt;/td&gt;
&lt;td&gt;$5.00 (unchanged)&lt;/td&gt;
&lt;td&gt;$30.00 (unchanged)&lt;/td&gt;
&lt;td&gt;$11.25&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Blended figures are 3 parts input to 1 part output, which is roughly what a real chat or RAG workload looks like. Straight input/output averages make cheap-input models look worse than they are.&lt;/p&gt;

&lt;p&gt;Three things convinced me this was a genuine vendor change rather than me misreading a page:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Batch and Flex tiers moved in exact lockstep&lt;/strong&gt; — both landed at precisely half the standard rate, the same relationship they had before. A scraping error doesn't preserve internal ratios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sol didn't move at all.&lt;/strong&gt; A parsing failure would have mangled all three rows in the family, not two.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The old numbers were themselves two-source verified&lt;/strong&gt; on July 9th. The before-state wasn't a guess.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So: a real cut, silently shipped.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why nothing caught it
&lt;/h2&gt;

&lt;p&gt;This is the part worth your attention if you're building anything that depends on someone else's pricing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There is no changelog for API pricing.&lt;/strong&gt; Not at OpenAI, not at Anthropic, not at Google. There's a pricing page, it renders a number, and the number is whatever it is today. No version history, no RSS feed, no webhook, no deprecation notice. If you want to know what changed, you have to have written down what it was before.&lt;/p&gt;

&lt;p&gt;In my case three separate safety nets all failed at once, and they failed in an instructive way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The community datasets didn't have it.&lt;/strong&gt; LiteLLM — which a huge amount of tooling quietly depends on for pricing — has never carried &lt;code&gt;gpt-5.6-*&lt;/code&gt; entries at all. If your cost estimates come from a community price map, understand that &lt;em&gt;absence&lt;/em&gt; looks exactly like &lt;em&gt;nothing changed&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;My weekly verification sweep never selected it.&lt;/strong&gt; The sweep re-checks a rotating basket of models against first-party pricing pages. Luna wasn't in the basket. Nothing was wrong with the sweep; it just wasn't looking there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The one system that knew, told me uselessly.&lt;/strong&gt; I had a coverage tripwire that correctly emitted "a wrong price here would be invisible" for exactly this model. It printed that inside a 375-line wall of warnings, and then suggested I fix it by mapping the model in a LiteLLM ID file — for a model LiteLLM does not carry. A warning whose suggested remedy is impossible is not a warning. It's noise with a guilty conscience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The lesson I actually took from this: &lt;strong&gt;a signal that already exists and gets ignored is an enforcement problem, not a detection problem.&lt;/strong&gt; I didn't need a better detector. I needed the existing one to fail loudly instead of logging politely. That fix — a tripwire that breaks the build rather than adding a line to a log nobody reads — is what shipped alongside the corrected prices.&lt;/p&gt;

&lt;h2&gt;
  
  
  What six weeks of tracking actually shows
&lt;/h2&gt;

&lt;p&gt;Since I've been recording every price across every provider daily, I can say some things about the market that aren't obvious from any single pricing page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontier intelligence currently costs $4.66 per million tokens.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's an equal-weighted, chain-linked index across nine frontier models from nine different labs — OpenAI, Anthropic, Google, xAI, DeepSeek, Alibaba, Mistral, Z.AI, and Moonshot. It's down &lt;strong&gt;3.7%&lt;/strong&gt; since late February, and it has been completely flat for the last 7 days.&lt;/p&gt;

&lt;p&gt;Three findings from that basket surprised me:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The cheap end is absurdly cheap, and it isn't bad.&lt;/strong&gt; DeepSeek V4 Pro sits at $0.544 blended — roughly one twentieth of GPT-5.6 Sol at $11.25 — while scoring 71.5 on the Vellum leaderboard against Sol's 83.8. Normalize that to cost per benchmark point and DeepSeek costs &lt;strong&gt;$0.0076 per point&lt;/strong&gt; versus an index average of $0.0637. It is about eight times more cost-efficient than the average frontier model. Whether the last 12 benchmark points are worth a 20× price premium is a real engineering decision, and most teams never explicitly make it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Open weights are cheaper, but not by much.&lt;/strong&gt; Open-weight models in the basket average $4.08 blended; closed models average $4.83. That's a spread of 75 cents per million tokens — far narrower than the open-source-is-basically-free intuition suggests. If you're choosing open weights, do it for the portability and the fine-tuning, not the token price.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The frontier turns over shockingly fast.&lt;/strong&gt; In two weeks the basket had five model successions: GPT-5.5 → GPT-5.6 Sol, Grok 4 → Grok 4.5, Claude Opus 4.8 → Opus 5, Qwen3-Max → Qwen3.7-Max, plus Kimi K3 entering as a new constituent. &lt;strong&gt;Five of nine slots changed in fourteen days.&lt;/strong&gt; Any cost model you built a month ago is describing models that are no longer the current ones.&lt;/p&gt;

&lt;p&gt;Prices move in both directions too, which people forget. Over the same window Mistral raised Mixtral 8x7B Instruct 29.6% ($0.54 → $0.70) and Mistral Small 3.2 24B 36.4% ($0.08/$0.20 → $0.10/$0.30). Nobody announced those either.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to actually do about it
&lt;/h2&gt;

&lt;p&gt;Concrete, in rough order of effort:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pin the price in your cost model, with a date.&lt;/strong&gt; Not "GPT-5.6 Luna costs $1" but "GPT-5.6 Luna cost $1.00/$6.00 as of 2026-07-09." A cost estimate without an as-of date is a number pretending to be a fact. This is the single highest-value habit here and it costs you nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Re-verify before anything that depends on the number.&lt;/strong&gt; Budget approvals, model-selection decisions, customer-facing pricing. Five minutes on the vendor's own pricing page beats a three-week-old cached figure — as I demonstrated the hard way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't trust a community price map as a source of truth.&lt;/strong&gt; They're genuinely useful and they're maintained by good people, but coverage gaps are silent. A model that isn't listed doesn't look like a gap, it looks like nothing to report.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compute blended cost with your real ratio.&lt;/strong&gt; A summarizer that reads 50k tokens and writes 500 has completely different economics from an agent loop that generates constantly. The advertised "cheap" model flips depending on which one you are.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check whether prompt caching changes the answer.&lt;/strong&gt; For anything re-reading the same context — agents, RAG, long chats — cached input rates can move the ranking more than the headline price does. It's the most commonly ignored variable in these comparisons.&lt;/p&gt;

&lt;h2&gt;
  
  
  The uncomfortable conclusion
&lt;/h2&gt;

&lt;p&gt;I built a tool specifically to catch this class of problem, and it still took me 23 days to spot an 80% price cut on a current model from the largest provider in the space.&lt;/p&gt;

&lt;p&gt;That's not a story about my tool being bad. It's a story about how much of this ecosystem runs on numbers nobody is actually watching. If a dedicated tracker with daily snapshots and a verification sweep can carry a wrong price for three weeks, the spreadsheet where you modeled your unit economics in June is not in better shape.&lt;/p&gt;

&lt;p&gt;Write down the date next to the price. That's the whole takeaway.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The index numbers above are live at &lt;a href="https://modelpricewatch.com/price-index/" rel="noopener noreferrer"&gt;modelpricewatch.com/price-index&lt;/a&gt;, with the &lt;a href="https://modelpricewatch.com/price-index/methodology/" rel="noopener noreferrer"&gt;full methodology&lt;/a&gt; and a monthly &lt;a href="https://modelpricewatch.com/reports/state-of-llm-pricing-2026-08/" rel="noopener noreferrer"&gt;State of LLM Pricing&lt;/a&gt; report. Every price links to the vendor page it came from, with a capture timestamp.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I maintain ModelPriceWatch.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the oldest price still sitting in your cost model? Go check it — I'd genuinely like to know how many of you find a stale one.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>api</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Sonnet 5 vs GLM-5.2 vs everyone: how to pick the cheapest LLM API in 2026</title>
      <dc:creator>Roman Shumyatsky</dc:creator>
      <pubDate>Sat, 04 Jul 2026 05:10:24 +0000</pubDate>
      <link>https://dev.to/romans/sonnet-5-vs-glm-52-vs-everyone-how-to-pick-the-cheapest-llm-api-in-2026-49ja</link>
      <guid>https://dev.to/romans/sonnet-5-vs-glm-52-vs-everyone-how-to-pick-the-cheapest-llm-api-in-2026-49ja</guid>
      <description>&lt;p&gt;Two frontier-class models just launched weeks apart — Anthropic's Claude Sonnet 5&lt;br&gt;
(closed, $2/$10 per 1M launch pricing) and Z.AI's GLM-5.2 (open-weight, MIT, ~$1.40/&lt;br&gt;
$4.40 across hosts) — and the first question everyone asks is "which is cheaper?"&lt;br&gt;
The honest answer: it depends on your token mix, your tier, and whether cached&lt;br&gt;
input matters. Here's a repeatable way to answer it for &lt;em&gt;your&lt;/em&gt; case, using live,&lt;br&gt;
verified pricing.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Normalize everything to $/1M tokens
&lt;/h2&gt;

&lt;p&gt;Providers quote prices in incompatible units — per-1K, per-1M, sometimes per-image&lt;br&gt;
or per-character — and split input, output, and cached-input. Before you can&lt;br&gt;
compare anything, convert all of it to dollars per &lt;strong&gt;1 million&lt;/strong&gt; input tokens and&lt;br&gt;
per 1 million output tokens. (This is the single biggest source of "wait, that's&lt;br&gt;
cheaper than I thought" errors.)&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Separate the question by tier
&lt;/h2&gt;

&lt;p&gt;Comparing a frontier flagship to a budget model on price alone is meaningless.&lt;br&gt;
Bucket first, then compare within a bucket:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flagship / frontier:&lt;/strong&gt; the spread is real. The cheapest flagship-class model
right now is about &lt;strong&gt;$1 / $2 per 1M (in/out)&lt;/strong&gt;; the priciest frontier tier
runs up to &lt;strong&gt;$30 / $180&lt;/strong&gt;. Same nominal tier, a &lt;strong&gt;30-90x&lt;/strong&gt; spread — which is
exactly why you bucket first. Sonnet 5 lands mid-tier on price despite
frontier capability; GLM-5.2 is the cheapest &lt;em&gt;open&lt;/em&gt; option at that level.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget / fast:&lt;/strong&gt; the floor is far lower than most people assume —
&lt;strong&gt;~$0.017-$0.05 / 1M&lt;/strong&gt; input for capable small models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embeddings:&lt;/strong&gt; a near-commodity at &lt;strong&gt;~$0.02 / 1M&lt;/strong&gt; across several providers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-weight, multi-host:&lt;/strong&gt; the &lt;em&gt;same&lt;/em&gt; open model (GLM-5.2, DeepSeek, Qwen) is
often served by several providers at different prices — compare hosts, not just
models.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Weight by your actual token ratio
&lt;/h2&gt;

&lt;p&gt;A summarizer is input-heavy; a code generator is output-heavy. Output usually&lt;br&gt;
costs 3-5x input, so a model that looks cheap on input can lose on a&lt;br&gt;
generation-heavy workload. Multiply each rate by your real volume — don't eyeball&lt;br&gt;
the sticker price.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Don't forget cached input
&lt;/h2&gt;

&lt;p&gt;For RAG and agent loops you re-send the same context constantly. Cached-input&lt;br&gt;
pricing is often a huge discount — Sonnet 5's cache hits are &lt;strong&gt;90% cheaper&lt;/strong&gt; than&lt;br&gt;
fresh input ($0.20 vs $2.00 /1M) — and it can flip the ranking entirely. If your&lt;br&gt;
workload is cache-heavy, rank by cached-input price, not raw input. (There's a&lt;br&gt;
&lt;a href="https://modelpricewatch.com/best-for/prompt-caching" rel="noopener noreferrer"&gt;live ranking of caching-capable APIs&lt;/a&gt;&lt;br&gt;
if you want the current order.)&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Use live data, not a blog post's snapshot
&lt;/h2&gt;

&lt;p&gt;Prices move — Sonnet 5's own launch pricing reverts from $2/$10 to $3/$15 on Sep 1,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A table you screenshot today is wrong next month. I maintain
&lt;a href="https://modelpricewatch.com" rel="noopener noreferrer"&gt;Model Price Watch&lt;/a&gt;, which tracks 159 models across
24 providers and re-verifies prices against each provider's official pricing page
3x a day. If you'd rather script it, there's a free no-key JSON API:
&lt;code&gt;https://modelpricewatch.com/api/v1/models.json&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Worked example: for a chat product doing ~2M input / 0.5M output tokens a day, run&lt;br&gt;
those numbers through a cost calculator across your shortlist — and if you re-send&lt;br&gt;
a big system prompt each call, add the cached-input rate. The difference between&lt;br&gt;
Sonnet 5 with caching and a naive flagship default can be the majority of your bill.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclosure: I build and maintain Model Price Watch. The method above works with&lt;br&gt;
any pricing source — I just happen to keep one current.&lt;/em&gt;&lt;/p&gt;

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