<?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: Paul Piper</title>
    <description>The latest articles on DEV Community by Paul Piper (@madppiper).</description>
    <link>https://dev.to/madppiper</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%2F1747669%2Ff88ebf96-c9c6-4c52-ba88-76e3231b2af8.jpg</url>
      <title>DEV Community: Paul Piper</title>
      <link>https://dev.to/madppiper</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/madppiper"/>
    <language>en</language>
    <item>
      <title>My Thoughts on Jev, After the Private Beta</title>
      <dc:creator>Paul Piper</dc:creator>
      <pubDate>Fri, 18 Sep 2026 08:32:07 +0000</pubDate>
      <link>https://dev.to/madppiper/my-thoughts-on-jev-after-the-private-beta-a8m</link>
      <guid>https://dev.to/madppiper/my-thoughts-on-jev-after-the-private-beta-a8m</guid>
      <description>&lt;p&gt;Jev is the first model in a long while that I wanted in production the same week I tested it. It is also the first one I have to explain by what it refuses to do, because it is different.&lt;/p&gt;

&lt;p&gt;It is not your normal llm. It does not chat. It does not write. It does not reason. What it does is something different - it judges, scores and categorizes and it does so at a fraction of the cost and incredible speed. It hands back typed values: a choice from a list, a score on a scale, or a yes/no probability. Every answer carries a confidence number. That's all.&lt;/p&gt;

&lt;p&gt;Diogo Almeida founded TypeSafe AI with Erik Gafni and Sasha Sheng, and they came out of stealth on 15 September with $40 million led by DCVC. Almeida is ex-OpenAI, one of the people behind RLHF and InstructGPT. So it is kinda cool that they are taking this entire industry into a different direction. &lt;/p&gt;

&lt;p&gt;I have long been a proponent of the idea that specialized tiny models at a fraction of the cost should become the industry norm. I don't always want a reasoning model arguing for minutes with itself, sometimes I just want a confident answer and Jev promises this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it is genuinely fantastic
&lt;/h2&gt;

&lt;p&gt;So I ran a test and replaced some of the core routines in various of my projects. Jev delivered whenever I asked it to do micro-decisions, routing, and performed as a real judge. It did better than Mistral-small or similar models, it was faster, more accurate. &lt;/p&gt;

&lt;p&gt;The case I benchmarked hardest on was an intent gate. I often add these to my projects - they check what the user "wants to do" and then reroute accordingly to a proper model with a selection of tools. It helps keep things slim (prompts included) and reduces tokens. And I often use it to check if the user is sneakily trying to do something I don't want them to - ie, misuse my software for something. &lt;/p&gt;

&lt;p&gt;I had close to 70 cases, and reran the script three times. Jev got every single one right in all three rounds. The median was 250 ms and on average it ran between 453 and 688 ms. Out of every model I put in that bench (I tried a few) it was the only one that never once blew the 1.5 second budget. That was what I had hoped for - accurate performance for something other models would take longer for.&lt;/p&gt;

&lt;p&gt;The second case was a judge with no incumbent at all. One yes/no question on a slide deck, 40 slides, one call, 1.41 seconds. It caught claims in that deck that I had read past myself - Jev spotted them accurately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it does not fit
&lt;/h2&gt;

&lt;p&gt;I cannot talk about Jev without talking about the downsides. Like I said in the intro, Jev is not your normal llm and you should not treat it as such. It is also incapable of handling many use cases, such as:&lt;/p&gt;

&lt;p&gt;No images. The input is always text, objects or arrays. &lt;/p&gt;

&lt;p&gt;No prose output, which sounds obvious until you go through your own candidate list and find how many of them need one human-readable sentence at the end.&lt;/p&gt;

&lt;p&gt;It is not OpenAI compatible, either. The api endpoint is different at the moment. Though I bet that'll get solved quickly, for now it means that you cannot swap it in as a model name in a config file, so every single use is new code. That is a real cost and it is worth knowing before you get excited.&lt;/p&gt;

&lt;h2&gt;
  
  
  The business model is unqiue
&lt;/h2&gt;

&lt;p&gt;Lastly, I should talk about the business model. Jev costs only $0.042 per million input tokens and the Output is free, which they describe as too cheap to meter.&lt;/p&gt;

&lt;p&gt;They named the model after William Stanley Jevons, which is not subtle and not meant to be. Jevons paradox says that making a resource cheaper raises total consumption rather than lowering it. So the pricing is not a launch discount, it is the thesis: at four cents a million tokens, you may start wondering which "micro decision" you can now actually route to an llm, when it was simply too costly before.&lt;/p&gt;

&lt;p&gt;The transactions are tiny and so are the costs. They are in it for the long run rather than for this quarter and it gets me excited to play around with Jev some more and see if I can come up with new business models, too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion if there is one
&lt;/h2&gt;

&lt;p&gt;I think that Jev is a fantastic addition to the model space. It ventures into a region that opens up new possibilities for all of us and it gets me excited over having a new lever to pull during my implementations. Kudos to the team!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why our slide decks are plain text files</title>
      <dc:creator>Paul Piper</dc:creator>
      <pubDate>Mon, 03 Aug 2026 15:53:38 +0000</pubDate>
      <link>https://dev.to/madppiper/why-our-slide-decks-are-plain-text-files-219g</link>
      <guid>https://dev.to/madppiper/why-our-slide-decks-are-plain-text-files-219g</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy3ltqywhzpg92r2a27g8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy3ltqywhzpg92r2a27g8.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have ever tried to code-review a slide deck, you already know the problem this is about. Here is what we did instead, and what it cost.&lt;/p&gt;

&lt;p&gt;Slaide keeps a slide deck in one plain-text file, so it diffs in git, reviews like code, and an agent can write it without touching a GUI.&lt;/p&gt;

&lt;p&gt;I have written a lot of decks. Every one of them ended up as a binary sitting in a shared drive, and every one of them had the same three problems: I could not diff it, I could not review it, and I could not automate it. The fix turned out to be boring. Make the deck a text file.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a .slaide file?
&lt;/h2&gt;

&lt;p&gt;It is Markdown for the words plus a short YAML block for the theme. That is the whole format.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;theme:
  palette: ink
  font: IBM Plex Sans

# The problem
Decks are binaries.

- You cannot diff them
- You cannot review them
- You cannot generate them without a GUI

# The fix
Make the deck a text file.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That file renders to a web deck, to a PDF, and to a &lt;code&gt;.pptx&lt;/code&gt; that opens and edits normally in PowerPoint. Same source, three outputs, no export dance in between.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does the source format matter so much?
&lt;/h2&gt;

&lt;p&gt;Because everything you want to do with a deck downstream depends on it.&lt;/p&gt;

&lt;p&gt;A binary deck cannot go through code review. You can attach it to a pull request, but nobody can see what changed between revision four and revision five, so nobody reviews it properly. A text deck shows up as a diff: three lines changed on the pricing slide, and the reviewer reads three lines.&lt;/p&gt;

&lt;p&gt;A binary deck also cannot be written by an agent. This is the part that pushed me over. You cannot hand a model a &lt;code&gt;.pptx&lt;/code&gt; and say "slide 12 is too wordy, fix it" - the model would have to drive a GUI or rewrite OOXML, and neither of those is a thing you want happening unattended. Hand it a text file and the job is ordinary text editing, which models are good at.&lt;/p&gt;

&lt;p&gt;Slaide comes with an MCP server and an Agent Skill for exactly this. The agent reads the file, edits the file, and the renderer does the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  What about the PowerPoint problem?
&lt;/h2&gt;

&lt;p&gt;This is the objection I get first, and it is a fair one. Nobody in a company runs on Markdown. "Send me the slides" means "send me something I can open and change".&lt;/p&gt;

&lt;p&gt;So &lt;code&gt;.pptx&lt;/code&gt; export is not a screenshot dump. The exported file has real text boxes, real shapes and real editable content, and someone who has never heard of Slaide can open it and move a box around. Import works the other way too: give Slaide an existing &lt;code&gt;.pptx&lt;/code&gt; and you get the text form back.&lt;/p&gt;

&lt;p&gt;The round-trip was the hardest part of the project by a wide margin. OOXML is not a format that wants to be written by hand, and getting a slide to survive the trip out to PowerPoint and back without drifting took far longer than the renderer did.&lt;/p&gt;

&lt;p&gt;Here is the honest limitation: a heavily designed deck does not survive a round trip perfectly. If your slides are full of hand-placed decorative elements and bespoke animations, importing them will flatten some of that. Slaide is best when the deck is mostly content, which in practice covers most working decks and not most conference keynotes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is open source and what is not?
&lt;/h2&gt;

&lt;p&gt;Being specific about this matters more than being generous about it.&lt;/p&gt;

&lt;p&gt;The core is Apache-2.0 and lives at &lt;a href="https://github.com/aivorynet/slaide" rel="noopener noreferrer"&gt;github.com/aivorynet/slaide&lt;/a&gt;. That includes the renderer, the CLI, the &lt;code&gt;.pptx&lt;/code&gt; import and export, the MCP server and the Agent Skill. If you want to render decks in CI, or generate them from a script, or build something on top of the format, that is the licence you are working under and there is no lock-in: the file is text, and the exporter is open.&lt;/p&gt;

&lt;p&gt;The WYSIWYG editor is closed source. It is free once you sign in - that changed on 28 July 2026, and it changed because charging for the editor was getting me a number on a dashboard rather than users with a deck already in the thing.&lt;/p&gt;

&lt;p&gt;The desktop viewer is Rust with a WebView, and it spawns the renderer as a separate binary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who is this actually for?
&lt;/h2&gt;

&lt;p&gt;Three groups, in the order they show up:&lt;/p&gt;

&lt;p&gt;Developers who already keep everything else in git and find it strange that the deck is the one artefact that cannot be reviewed. Teams who generate decks programmatically - weekly metrics, customer reports, anything where a human assembling slides by hand is a waste of a human. And people building with agents, who want a deck as an output format that a model can actually produce.&lt;/p&gt;

&lt;p&gt;If you make a living designing beautiful bespoke presentations, this is not aimed at you and I would not try to convince you.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you start?
&lt;/h2&gt;

&lt;p&gt;Install the core, write a file, render it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; slaide
slaide render deck.slaide &lt;span class="nt"&gt;--out&lt;/span&gt; deck.pptx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the whole loop. The web deck and the PDF come out of the same command with a different &lt;code&gt;--out&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>markdown</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How a Spreadsheet Turned Into an LLM Inference Router</title>
      <dc:creator>Paul Piper</dc:creator>
      <pubDate>Tue, 09 Jun 2026 13:29:02 +0000</pubDate>
      <link>https://dev.to/madppiper/how-a-spreadsheet-turned-into-an-llm-inference-router-1370</link>
      <guid>https://dev.to/madppiper/how-a-spreadsheet-turned-into-an-llm-inference-router-1370</guid>
      <description>&lt;p&gt;Like any founder these days, my AI computing bill was horrendous. I was running open-weight models for several of my own products, and I started looking for cheaper options. Every few weeks I'd find a provider with better rates, migrate over, and then discover the prices had shifted again.&lt;/p&gt;

&lt;p&gt;So I did what any developer would do when faced with a repetitive task: I built a spreadsheet.&lt;/p&gt;

&lt;h2&gt;
  
  
  It Started as a Database
&lt;/h2&gt;

&lt;p&gt;The spreadsheet turned into a SQLite database pretty quickly. I started polling pricing APIs from the providers I was already using (Together, DeepInfra, Fireworks, a few others) and logging the results every few minutes. Just for my own reference, so I could see trends and decide when to switch.&lt;/p&gt;

&lt;p&gt;A few weeks in, the data showed something I hadn't expected. The price for the exact same model, same weights, same architecture, varied wildly across providers. Not by 10-20%. By 2x, sometimes more. And the cheapest provider wasn't always the same one. It changed multiple times per day. Off-peak hours (US night, EU morning) were consistently cheaper. Some providers had stable pricing; others fluctuated hourly, creating windows where they'd drop well below their usual rates.&lt;/p&gt;

&lt;p&gt;I was looking at this data every morning over coffee, manually deciding which provider to point my services at. That got old fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Tracking to Routing
&lt;/h2&gt;

&lt;p&gt;If I already had a database of live prices, why not just route requests automatically?&lt;/p&gt;

&lt;p&gt;I wrote a proxy that sat between my applications and the inference providers. When a request came in, it looked up the current cheapest provider for that model and forwarded the request there. If that provider failed, it tried the next cheapest. My apps didn't need to know or care which backend was serving them.&lt;/p&gt;

&lt;p&gt;I kept it OpenAI-compatible from the start because all my code already used the OpenAI SDK. Switching meant changing one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.aivory.net/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# the only change
&lt;/span&gt;    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-aivory-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;llama-3.3-70b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Streaming, function calling, JSON mode, retry logic. All of it works because the API contract is identical.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then I Started Using It for Everything
&lt;/h2&gt;

&lt;p&gt;Once the router was running, I pointed all my own services at it. I run a few products that use inference heavily, and within the first month my costs dropped by about 60% without changing any application code.&lt;/p&gt;

&lt;p&gt;That was when I thought: other people have this problem too. Most teams pick a provider, integrate their SDK, and stay there. Switching means rewriting integration code, handling different auth flows, debugging streaming behavior differences. The friction of switching is what lets providers charge different rates for what is essentially the same commodity.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Pricing Data Actually Looks Like
&lt;/h2&gt;

&lt;p&gt;Here are real numbers from our API right now. These change constantly, which is the whole point:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4lqw46zoevkb89el9jim.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4lqw46zoevkb89el9jim.png" alt="Model pricing table showing 133 models with vendor, input and output prices per million tokens" width="800" height="378"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The model pricing dashboard. 133 models across vendors like Anthropic, DeepSeek, Google, Meta, and Qwen, each with live per-token pricing.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DeepSeek V3.2&lt;/strong&gt; (13 provider endpoints tracked):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Input (per 1M tokens)&lt;/th&gt;
&lt;th&gt;Output (per 1M tokens)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cheapest&lt;/td&gt;
&lt;td&gt;$0.46&lt;/td&gt;
&lt;td&gt;$0.83&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mid-range&lt;/td&gt;
&lt;td&gt;$0.49&lt;/td&gt;
&lt;td&gt;$1.13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Most expensive&lt;/td&gt;
&lt;td&gt;$0.54&lt;/td&gt;
&lt;td&gt;$1.38&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Llama 3.3 70B&lt;/strong&gt; (4 provider endpoints):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Input (per 1M tokens)&lt;/th&gt;
&lt;th&gt;Output (per 1M tokens)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cheapest&lt;/td&gt;
&lt;td&gt;$0.38&lt;/td&gt;
&lt;td&gt;$0.51&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mid-range&lt;/td&gt;
&lt;td&gt;$0.40&lt;/td&gt;
&lt;td&gt;$0.56&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Most expensive&lt;/td&gt;
&lt;td&gt;$0.92&lt;/td&gt;
&lt;td&gt;$0.92&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Qwen 3 235B&lt;/strong&gt; (6 provider endpoints):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Input (per 1M tokens)&lt;/th&gt;
&lt;th&gt;Output (per 1M tokens)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cheapest&lt;/td&gt;
&lt;td&gt;$0.35&lt;/td&gt;
&lt;td&gt;$0.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mid-range&lt;/td&gt;
&lt;td&gt;$0.42&lt;/td&gt;
&lt;td&gt;$1.68&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Most expensive&lt;/td&gt;
&lt;td&gt;$0.48&lt;/td&gt;
&lt;td&gt;$3.15&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That last one is wild. The output price for Qwen 3 235B varies almost &lt;strong&gt;8x&lt;/strong&gt; across providers. And these are all serving the same model weights.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Same Problem, but for GPUs
&lt;/h2&gt;

&lt;p&gt;The entire endavour got me thinking about the other costs at large. Inference points aren't that common, still, but GPUs can be booked anywhere. So I checked if I could do the same manual price comparison there and upgraded my layer for GPU spot pricing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ni0abomlzi0zmwdqqks.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ni0abomlzi0zmwdqqks.png" alt="GPU marketplace showing 37 GPU types across 9 providers, with Top Picks and Biggest Savings sections" width="800" height="378"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The GPU spot marketplace. 37 GPU types across 9 providers, sorted by price. Top picks: H200 at $0.60/hr, H100 at $1.30/hr. Biggest savings: V100 at $0.07/hr.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The spreads are just as big as with inference pricing - if not even larger. An A100 80GB ranges from &lt;strong&gt;$0.71/hr to $2.48/hr&lt;/strong&gt; right now, a 3.5x spread. H100s go from &lt;strong&gt;$1.30/hr to $7.38/hr&lt;/strong&gt;. V100s range from &lt;strong&gt;$0.07/hr to $0.95/hr&lt;/strong&gt;, a 13x spread.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2kmipbzvjirfufwxjorw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2kmipbzvjirfufwxjorw.png" alt="GPU listing table showing Featured GPUs, NVIDIA Latest Generation, and Data Center tiers with price ranges and availability" width="800" height="378"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Each GPU shows the price range across providers, availability status, and number of competing offers. Deploy in one click.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The marketplace tracks various gpu types across a growing list of providers right now. Per-second billing, auto-shutdown on idle, and you can set a max price so you don't get surprised.&lt;/p&gt;

&lt;h2&gt;
  
  
  So where's the downside?
&lt;/h2&gt;

&lt;p&gt;Well, I can only think of one: Routing adds latency. Not much, but perhaps not something for everybody. However, for most interactive sessions it is probably negligible.&lt;/p&gt;

&lt;p&gt;Also: We're open-weight only. No GPT, Claude, or Gemini. But probably okay - realistically, it is what you probably rely on for most of your actual applications anyway.&lt;/p&gt;

&lt;p&gt;But apart from that, there is another upside - provider outages work differently with a router. If your single provider goes down, you're down. With a router, you're only down if &lt;em&gt;all&lt;/em&gt; providers go down at the same time, which is much rarer. That turned out to be a nice side effect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Market Looks Like Early Cloud Computing
&lt;/h2&gt;

&lt;p&gt;What I find genuinely interesting about all of this is that inference pricing in 2026 looks a lot like cloud computing did in 2010. Dozens of providers, no price transparency, wildly different rates for identical hardware. The only reason providers can charge 2-8x more than their competitors is because nobody is comparing in real-time.&lt;/p&gt;

&lt;p&gt;Spot pricing for GPUs follows the same dynamics as spot instances on AWS. Providers would rather sell unused capacity at a discount than let it sit idle. But unlike AWS, where everyone knows the spot market exists, most people renting GPUs for ML workloads are still paying on-demand rates from a single provider they picked months ago.&lt;/p&gt;

&lt;p&gt;I keep expecting the spreads to compress as the market matures, but so far the opposite has happened. New providers enter, existing ones experiment with pricing, and the range just gets wider. Maybe it'll consolidate eventually. But as long as providers are competing for utilization on hardware that depreciates fast, there's going to be a gap between whoever's desperate to fill capacity right now and whoever isn't.&lt;/p&gt;

&lt;p&gt;If you want to check out what I built from all of this, give it a go at &lt;a href="https://aivory.net/smart-inference/" rel="noopener noreferrer"&gt;aivory.net/smart-inference&lt;/a&gt; and reach out to me for feedback.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
