<?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: smakosh</title>
    <description>The latest articles on DEV Community by smakosh (@smakosh).</description>
    <link>https://dev.to/smakosh</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%2F19812%2F2c178f95-1eff-4273-8473-114f8c7dc901.jpg</url>
      <title>DEV Community: smakosh</title>
      <link>https://dev.to/smakosh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/smakosh"/>
    <language>en</language>
    <item>
      <title>OpenAI Subscription Update: ChatGPT Pro vs DevPass</title>
      <dc:creator>smakosh</dc:creator>
      <pubDate>Tue, 29 Sep 2026 16:41:03 +0000</pubDate>
      <link>https://dev.to/smakosh/openai-subscription-update-chatgpt-pro-vs-devpass-24bn</link>
      <guid>https://dev.to/smakosh/openai-subscription-update-chatgpt-pro-vs-devpass-24bn</guid>
      <description>&lt;p&gt;Originally published on &lt;a href="https://llmgateway.io/blog/openai-subscription-update-devpass" rel="noopener noreferrer"&gt;LLM Gateway&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The subscription price can stay the same while the usage behind it changes.&lt;br&gt;
The &lt;strong&gt;OpenAI subscription update&lt;/strong&gt; does exactly that for the $200 Pro tier:&lt;br&gt;
OpenAI says its new usage calculation represents half the old allowance in&lt;br&gt;
API-dollar terms.&lt;/p&gt;

&lt;p&gt;DevPass, the coding subscription from &lt;strong&gt;LLM Gateway&lt;/strong&gt;, is changing too. Its&lt;br&gt;
planned October 15 update reduces monthly included usage from 3× to 2× the&lt;br&gt;
plan price and adds daily caps. A useful comparison needs both changes on the&lt;br&gt;
table, not yesterday's more generous numbers.&lt;/p&gt;

&lt;p&gt;Here's what each subscription buys, where the limits differ, and which one&lt;br&gt;
fits your coding workflow. Pricing and announcements checked September 29, 2026;&lt;br&gt;
amounts below are in USD.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understand the OpenAI subscription update
&lt;/h2&gt;

&lt;p&gt;In &lt;a href="https://x.com/thsottiaux/status/2104823812042940713" rel="noopener noreferrer"&gt;OpenAI's announcement&lt;/a&gt;,&lt;br&gt;
Tibo says new $200 Pro subscriptions are reopening with a revised usage&lt;br&gt;
calculation. The stated change is &lt;strong&gt;half the API-dollar equivalent of the old&lt;br&gt;
$200 Pro plan&lt;/strong&gt;, not a lower subscription price.&lt;/p&gt;

&lt;p&gt;For Codex/Work usage, the revised comparison is:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ChatGPT plan&lt;/th&gt;
&lt;th&gt;Monthly price&lt;/th&gt;
&lt;th&gt;Usage relative to Plus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Plus&lt;/td&gt;
&lt;td&gt;$20&lt;/td&gt;
&lt;td&gt;1×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro, $100 tier&lt;/td&gt;
&lt;td&gt;$100&lt;/td&gt;
&lt;td&gt;5×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro, $200 tier&lt;/td&gt;
&lt;td&gt;$200&lt;/td&gt;
&lt;td&gt;10× equivalent under the announced recalculation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The 10× figure reflects the halving of the previous 20× tier. At publication,&lt;br&gt;
OpenAI's &lt;a href="https://help.openai.com/en/articles/9793128-about-chatgpt-pro-tiers" rel="noopener noreferrer"&gt;Pro help page&lt;/a&gt;&lt;br&gt;
still describes the earlier 20× allowance and signup pause. Treat this table as&lt;br&gt;
the announced Codex/Work change, not a claim that every account or every ChatGPT&lt;br&gt;
feature has already switched. Check your account for the limits that apply to&lt;br&gt;
your subscription.&lt;/p&gt;

&lt;p&gt;The practical difference: the $200 tier now scales proportionally with the&lt;br&gt;
$100 tier in this comparison. Twice the price buys twice the relative usage,&lt;br&gt;
not four times.&lt;/p&gt;

&lt;p&gt;There is an important benefit on OpenAI's side. The announcement commits to&lt;br&gt;
&lt;strong&gt;not bringing back the five-hour limit&lt;/strong&gt;, so subscribers can use their weekly&lt;br&gt;
allowance when they need it. OpenAI also argues that cheaper, more capable&lt;br&gt;
models can deliver more work per dollar. A 50% reduction in API-dollar&lt;br&gt;
allowance is not proof of 50% fewer completed coding tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Include DevPass's upcoming 2× allowance
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/theopenco/llmgateway/pull/4039" rel="noopener noreferrer"&gt;PR #4039&lt;/a&gt; contains the&lt;br&gt;
upcoming DevPass allowance and pacing changes. It is still open as of this&lt;br&gt;
post. The &lt;a href="https://devpass.llmgateway.io/legal/terms#october-2026-plan-changes" rel="noopener noreferrer"&gt;published October 15 notice&lt;/a&gt;&lt;br&gt;
sets out when they apply.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The reduction is from 3× to 2×, not a halving.&lt;/strong&gt; You lose one-third of the&lt;br&gt;
standard monthly allowance; the subscription price stays the same.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;DevPass plan&lt;/th&gt;
&lt;th&gt;Monthly price, unchanged&lt;/th&gt;
&lt;th&gt;Current 3× monthly allowance&lt;/th&gt;
&lt;th&gt;Upcoming 2× monthly allowance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lite&lt;/td&gt;
&lt;td&gt;$29&lt;/td&gt;
&lt;td&gt;$87&lt;/td&gt;
&lt;td&gt;$58&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$79&lt;/td&gt;
&lt;td&gt;$237&lt;/td&gt;
&lt;td&gt;$158&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td&gt;$179&lt;/td&gt;
&lt;td&gt;$537&lt;/td&gt;
&lt;td&gt;$358&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These allowance amounts measure eligible model usage at provider rates. They&lt;br&gt;
are not cash, unrestricted API credits, or a promise of a fixed number of&lt;br&gt;
prompts. The model, context length, output, and caching affect how fast you&lt;br&gt;
use them. Check the &lt;a href="https://devpass.llmgateway.io/models" rel="noopener noreferrer"&gt;live DevPass model directory&lt;/a&gt;&lt;br&gt;
for supported models and their categories.&lt;/p&gt;

&lt;p&gt;The rollout has two clocks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Monthly allowance:&lt;/strong&gt; new subscriptions from October 15, 2026 start at 2×.
Existing subscriptions move to 2× at their first renewal on or after that
date. Immediate upgrades starting a new billing cycle from that date also
use 2×, subject to the upgrade rollover rule.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily caps, premium weekly caps, and Reset Pass changes:&lt;/strong&gt; these apply on
October 15, including during a billing cycle that started earlier. Cap
percentages use the new standard monthly allowance, even while that cycle
retains its earlier monthly pool.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Budget for daily and premium limits
&lt;/h3&gt;

&lt;p&gt;The monthly number is not the amount you can spend in one sitting. PR #4039&lt;br&gt;
adds a rolling 24-hour cap across all models and tightens the premium weekly&lt;br&gt;
cap from 12% / 15% / 18% to 10% / 12% / 15% for Lite / Pro / Max.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Planned limit or benefit&lt;/th&gt;
&lt;th&gt;Lite&lt;/th&gt;
&lt;th&gt;Pro&lt;/th&gt;
&lt;th&gt;Max&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Daily cap, all models&lt;/td&gt;
&lt;td&gt;8% ($4.64)&lt;/td&gt;
&lt;td&gt;9% ($14.22)&lt;/td&gt;
&lt;td&gt;10% ($35.80)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Premium weekly cap&lt;/td&gt;
&lt;td&gt;10% ($5.80)&lt;/td&gt;
&lt;td&gt;12% ($18.96)&lt;/td&gt;
&lt;td&gt;15% ($53.70)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price per Reset Pass&lt;/td&gt;
&lt;td&gt;$5&lt;/td&gt;
&lt;td&gt;$15&lt;/td&gt;
&lt;td&gt;$45&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Included Reset Passes per billing cycle&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Daily and weekly amounts above are portions of the monthly pool, not extra&lt;br&gt;
usage. Premium requests count against both caps. &lt;strong&gt;Pro loses its included&lt;br&gt;
Reset Pass; Max keeps two.&lt;/strong&gt; A Reset Pass restores only the premium weekly&lt;br&gt;
allowance. It does not replenish the daily or monthly allowance.&lt;/p&gt;

&lt;p&gt;At a cap, requests are rejected with &lt;code&gt;402&lt;/code&gt;, not paused or queued, unless&lt;br&gt;
pay-as-you-go overflow is enabled and credits are available. Otherwise, callers&lt;br&gt;
must retry after the applicable reset. Overflow costs extra; it is not included&lt;br&gt;
in the subscription. The PR adds an overflow choice at signup, off by default.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compare the workflow, not just the multiplier
&lt;/h2&gt;

&lt;p&gt;OpenAI's &lt;strong&gt;10×&lt;/strong&gt; means usage relative to ChatGPT Plus. DevPass's &lt;strong&gt;2×&lt;/strong&gt; means&lt;br&gt;
provider-rate usage relative to the subscription price. They have different&lt;br&gt;
baselines. Dividing one by the other tells you nothing about how many coding&lt;br&gt;
tasks either plan can complete.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What matters to you&lt;/th&gt;
&lt;th&gt;ChatGPT subscription&lt;/th&gt;
&lt;th&gt;DevPass after the planned update&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Where you work&lt;/td&gt;
&lt;td&gt;Native ChatGPT and Codex experience&lt;/td&gt;
&lt;td&gt;Supported coding tools with one DevPass key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model choice&lt;/td&gt;
&lt;td&gt;OpenAI's subscription offering&lt;/td&gt;
&lt;td&gt;Eligible models across providers in the DevPass directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How usage is expressed&lt;/td&gt;
&lt;td&gt;Relative plan allowances and product-specific limits&lt;/td&gt;
&lt;td&gt;Provider-rate monthly pool, daily cap, and premium weekly cap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bursty coding sessions&lt;/td&gt;
&lt;td&gt;Announced $200 Pro plan: no five-hour limit; weekly allowance still applies&lt;/td&gt;
&lt;td&gt;Rolling 24-hour cap, plus premium weekly cap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Beyond coding&lt;/td&gt;
&lt;td&gt;ChatGPT's broader product features&lt;/td&gt;
&lt;td&gt;Not a replacement for ChatGPT's general-purpose subscription&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Choose ChatGPT Plus or Pro if you want OpenAI's native experience.&lt;/strong&gt; If your&lt;br&gt;
work stays in ChatGPT and Codex, switching providers may solve no problem for&lt;br&gt;
you. For the announced $200 Pro plan, concentrating weekly usage into a busy&lt;br&gt;
day also matters. A ChatGPT subscription does not include OpenAI API billing&lt;br&gt;
credits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose DevPass if you want your coding budget to follow your tools and&lt;br&gt;
model choices.&lt;/strong&gt; Use one key across supported tools such as Codex CLI, Claude&lt;br&gt;
Code, Cursor, and OpenCode. You can change the model you use for a task without&lt;br&gt;
buying a separate subscription for each provider. For example, DevPass Pro's&lt;br&gt;
planned $79 monthly price covers $158 of eligible usage, provided your work&lt;br&gt;
fits its daily and premium limits.&lt;/p&gt;

&lt;p&gt;DevPass is not unlimited. It does not grant ChatGPT Pro membership or every&lt;br&gt;
native Codex feature. Under the&lt;br&gt;
&lt;a href="https://devpass.llmgateway.io/legal/terms" rel="noopener noreferrer"&gt;upcoming scope terms&lt;/a&gt;, billing periods&lt;br&gt;
starting on or after October 15 are for interactive software development&lt;br&gt;
through approved coding tools only. General-purpose chat, content generation,&lt;br&gt;
and automation are not included. For applications or direct API workloads,&lt;br&gt;
use &lt;a href="https://llmgateway.io/pricing" rel="noopener noreferrer"&gt;standard LLM Gateway credits&lt;/a&gt; instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep Codex CLI, change how you pay for inference
&lt;/h2&gt;

&lt;p&gt;You do not have to abandon Codex CLI to try DevPass. Follow the&lt;br&gt;
&lt;a href="https://docs.llmgateway.io/guides/codex-cli" rel="noopener noreferrer"&gt;Codex CLI custom-provider guide&lt;/a&gt;,&lt;br&gt;
configure LLM Gateway as the provider, and use your DevPass key. Requests on&lt;br&gt;
that configuration draw from DevPass, not your ChatGPT subscription allowance.&lt;br&gt;
Your native ChatGPT subscription remains separate.&lt;/p&gt;

&lt;p&gt;Before choosing a tier, look at a normal coding day and your busiest one.&lt;br&gt;
Check total usage, premium-model usage, and whether a daily cap would interrupt&lt;br&gt;
you. A larger monthly pool is useful only if you can use it when you need it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://devpass.llmgateway.io/signup" rel="noopener noreferrer"&gt;Choose your DevPass plan&lt;/a&gt;&lt;/strong&gt; after reviewing the &lt;a href="https://devpass.llmgateway.io/pricing" rel="noopener noreferrer"&gt;pricing and October changes&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.llmgateway.io/guides" rel="noopener noreferrer"&gt;Set up your coding tool&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://llmgateway.io/blog/best-ai-coding-plans" rel="noopener noreferrer"&gt;Compare other AI coding plans&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>An LLM Decision API That Returns Values, Not Text</title>
      <dc:creator>smakosh</dc:creator>
      <pubDate>Sat, 26 Sep 2026 12:59:42 +0000</pubDate>
      <link>https://dev.to/smakosh/an-llm-decision-api-that-returns-values-not-text-p6</link>
      <guid>https://dev.to/smakosh/an-llm-decision-api-that-returns-values-not-text-p6</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://llmgateway.io/blog/llm-decision-api" rel="noopener noreferrer"&gt;LLM Gateway&lt;/a&gt;. Disclosure: I work on LLM Gateway; this republication was prepared with AI assistance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A lot of production LLM traffic is not generation at all. It is a model being&lt;br&gt;
asked a question with a small, known answer set: which team owns this ticket,&lt;br&gt;
is this passage relevant to the query, does this citation support the claim, is&lt;br&gt;
this record a duplicate. The answer is one of three options, or a number&lt;br&gt;
between zero and one — and yet the call goes to a chat model, which writes a&lt;br&gt;
sentence about it.&lt;/p&gt;

&lt;p&gt;That costs more than it looks. You write prompt scaffolding to force JSON, you&lt;br&gt;
parse and validate the result, you retry when the model prefixes it with&lt;br&gt;
"Sure!", and you pay for every output token spent saying something your code&lt;br&gt;
immediately throws away. Worst of all, you get a verdict with no uncertainty&lt;br&gt;
attached: the model says &lt;code&gt;billing&lt;/code&gt; with exactly as much apparent conviction&lt;br&gt;
when it is sure as when it is guessing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLM Gateway&lt;/strong&gt; now has a dedicated &lt;strong&gt;LLM decision API&lt;/strong&gt; for this shape of&lt;br&gt;
work. &lt;code&gt;POST /v1/systemone&lt;/code&gt; serves &lt;strong&gt;System One&lt;/strong&gt; models: models that read a&lt;br&gt;
state, answer questions you name, and return typed values with calibrated&lt;br&gt;
probabilities. There is no free-form text in the response.&lt;/p&gt;
&lt;h2&gt;
  
  
  Three question types
&lt;/h2&gt;

&lt;p&gt;A request has a &lt;code&gt;state&lt;/code&gt; — the thing being evaluated — and a map of questions&lt;br&gt;
keyed by ids you choose. Answers come back under the same ids.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Ask&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;noul&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A yes/no question&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;noul&lt;/code&gt;: probability the answer is yes, 0 to 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;choice&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;One option from a set you define&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;choice&lt;/code&gt;, &lt;code&gt;probabilities&lt;/code&gt; per option, &lt;code&gt;confidence&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A rating across ordered levels&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;score&lt;/code&gt; (can land between levels), &lt;code&gt;legend&lt;/code&gt;, &lt;code&gt;confidence&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Choice questions take two to 255 options, each with an optional rubric. Score&lt;br&gt;
questions take two to ten ordered levels, lowest first. Both &lt;code&gt;state&lt;/code&gt; and each&lt;br&gt;
&lt;code&gt;instructions&lt;/code&gt; field accept structured data as well as plain text, so a&lt;br&gt;
question can refer to fields of the record you passed in.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://api.llmgateway.io/v1/systemone"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$LLM_GATEWAY_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "jev-1.13.0",
    "state": "Help! My payouts have been failing for 3 days.",
    "questions": {
      "department": {
        "type": "choice",
        "instructions": "Which team should handle this?",
        "criteria": {
          "billing": "Payments, invoicing, refunds",
          "technical": "Bugs, outages, integrations",
          "sales": "Pricing, upgrades, new accounts"
        }
      },
      "is_urgent": {
        "type": "noul",
        "instructions": "Does this convey urgency?"
      },
      "impact": {
        "type": "score",
        "instructions": "Rate the operational impact.",
        "criteria": ["None", "Limited", "Critical"]
      }
    }
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"typesafe/jev-1.13.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"answers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"department"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"choice"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"choice"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"billing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"probabilities"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"billing"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.88&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"technical"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"sales"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.81&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"is_urgent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"noul"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"noul"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.95&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"impact"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"legend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"0"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"None"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Limited"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"2"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Critical"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"probabilities"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"0"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"2"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.88&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"input_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;318&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"output_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The policy stays in your code
&lt;/h2&gt;

&lt;p&gt;The reason a probability matters more than a label is that the cutoff is a&lt;br&gt;
product decision, not a model decision. A support router and a fraud hold want&lt;br&gt;
very different thresholds on the same question, and neither wants to renegotiate&lt;br&gt;
it by editing a prompt.&lt;/p&gt;

&lt;p&gt;With typed answers, the threshold is an &lt;code&gt;if&lt;/code&gt;. &lt;code&gt;confidence&lt;/code&gt; gives you a second&lt;br&gt;
axis: it is derived from the probability distribution, so you can send an&lt;br&gt;
uncertain case to a human instead of acting on what is effectively a coin flip.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;answers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;department&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;queueForTriage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;department&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;priority&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;is_urgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;noul&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;high&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;normal&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because the answer set is fixed by the request, there is no schema drift to&lt;br&gt;
guard against. &lt;code&gt;answers.department.choice&lt;/code&gt; is one of the keys you sent, every&lt;br&gt;
time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask everything at once
&lt;/h2&gt;

&lt;p&gt;The state is read once and every question is evaluated against it, so a batch&lt;br&gt;
of questions costs far less than one request each. That changes what is worth&lt;br&gt;
asking. Speculative questions — ones you only read when another answer makes&lt;br&gt;
them relevant — become close to free, so you can resolve a whole decision tree&lt;br&gt;
in a single round trip instead of chaining calls.&lt;/p&gt;

&lt;p&gt;The trade-off is that question text counts as input on every call. A large&lt;br&gt;
rubric attached to every request has a real per-request cost, so keep criteria&lt;br&gt;
tight and push detail into the state where it belongs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jev 1.13, billed on input only
&lt;/h2&gt;

&lt;p&gt;The first decision model on the gateway is &lt;code&gt;typesafe/jev-1.13.0&lt;/code&gt; from TypeSafe&lt;br&gt;
AI, at &lt;strong&gt;$0.042 per million input tokens with output free&lt;/strong&gt; — the response is a&lt;br&gt;
set of values, not generated text. Moving aliases such as &lt;code&gt;jev-latest&lt;/code&gt; are&lt;br&gt;
accepted and resolve to the pinned version, so a request is always billed and&lt;br&gt;
logged against a version whose price you can look up.&lt;/p&gt;

&lt;p&gt;The endpoint runs the same machinery as every other route on the gateway: API&lt;br&gt;
key auth, IAM rules, compliance policies, credit gating, provider key rotation,&lt;br&gt;
cancellation, and request logging with a per-model cost breakdown. The rate&lt;br&gt;
limit is 600 requests per minute per organization, and decision requests share&lt;br&gt;
the same fleet-wide concurrency budget as every other inference endpoint. See&lt;br&gt;
the &lt;a href="https://docs.llmgateway.io/resources/rate-limits" rel="noopener noreferrer"&gt;rate limits reference&lt;/a&gt;&lt;br&gt;
for the full table.&lt;/p&gt;

&lt;p&gt;A few constraints are worth knowing before you build on it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Decision models only work on &lt;code&gt;/v1/systemone&lt;/code&gt;. Requesting one on
&lt;code&gt;/v1/chat/completions&lt;/code&gt; returns a &lt;code&gt;400&lt;/code&gt; pointing at the right endpoint.&lt;/li&gt;
&lt;li&gt;They cannot generate text or call tools, and they are not in the Playground.&lt;/li&gt;
&lt;li&gt;Input is text only. There is no streaming — the response is a single object.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When a decision model is the wrong tool
&lt;/h2&gt;

&lt;p&gt;This is not a replacement for a chat model that happens to classify. If the&lt;br&gt;
answer set is open-ended, if you need the model to explain its reasoning to a&lt;br&gt;
human, or if the classification is one step inside a longer generative task,&lt;br&gt;
stay on &lt;code&gt;/v1/chat/completions&lt;/code&gt; — and if you want structured output there,&lt;br&gt;
&lt;a href="https://docs.llmgateway.io/learn/structured-outputs" rel="noopener noreferrer"&gt;structured outputs&lt;/a&gt; is still&lt;br&gt;
the right mechanism.&lt;/p&gt;

&lt;p&gt;Reach for a decision model when the call exists only to produce a value your&lt;br&gt;
code branches on, when you want a probability rather than an assertion, and&lt;br&gt;
when you are making enough of these calls that paying for output tokens on&lt;br&gt;
throwaway prose adds up.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://llmgateway.io/signup" rel="noopener noreferrer"&gt;Try LLM Gateway free&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://docs.llmgateway.io/features/system-one" rel="noopener noreferrer"&gt;System One docs&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://llmgateway.io/models?filters=1" rel="noopener noreferrer"&gt;Browse decision models&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>architecture</category>
      <category>llm</category>
    </item>
    <item>
      <title>Compliance Alerts for Blocked AI Models</title>
      <dc:creator>smakosh</dc:creator>
      <pubDate>Sat, 26 Sep 2026 12:59:07 +0000</pubDate>
      <link>https://dev.to/smakosh/compliance-alerts-for-blocked-ai-models-12n9</link>
      <guid>https://dev.to/smakosh/compliance-alerts-for-blocked-ai-models-12n9</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://llmgateway.io/blog/compliance-alerts" rel="noopener noreferrer"&gt;LLM Gateway&lt;/a&gt;. Disclosure: I work on LLM Gateway; this republication was prepared with AI assistance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A new model lands, your team wants it, and the answer is no — not because the&lt;br&gt;
model is unavailable, but because no provider serving it meets your compliance&lt;br&gt;
requirements. No training on prompts. SOC 2 Type 2 or ISO 27001. Headquarters&lt;br&gt;
in an approved country. Weeks later a provider that does meet all three quietly&lt;br&gt;
starts serving that model, and nobody notices, because the only way to find out&lt;br&gt;
was for someone to re-open the Models page and check by hand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compliance alerts&lt;/strong&gt; close that gap. Pick the models your policy blocks today,&lt;br&gt;
and &lt;strong&gt;LLM Gateway&lt;/strong&gt; tells your team the moment one becomes routable under your&lt;br&gt;
&lt;a href="https://docs.llmgateway.io/features/compliance" rel="noopener noreferrer"&gt;provider compliance policy&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch the models your policy blocks
&lt;/h2&gt;

&lt;p&gt;On the Compliance page, the model picker only offers models your saved policy&lt;br&gt;
currently blocks — the ones worth waiting for. Every minute, each watched model&lt;br&gt;
is re-evaluated against that policy, and the first time a compliant provider&lt;br&gt;
serves it, recipients get one alert naming the providers it can now route&lt;br&gt;
through.&lt;/p&gt;

&lt;p&gt;The check is a live evaluation, not a catalogue diff. That matters, because a&lt;br&gt;
model becomes usable for several different reasons:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What changed&lt;/th&gt;
&lt;th&gt;What you see&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A compliant provider starts serving the model&lt;/td&gt;
&lt;td&gt;"now available under your policy"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;An existing provider earns a certification&lt;/td&gt;
&lt;td&gt;Same alert, no catalogue change involved&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You relax a requirement yourself&lt;/td&gt;
&lt;td&gt;Same alert, so the team hears about it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The model loses its last compliant provider&lt;/td&gt;
&lt;td&gt;The watch re-arms for the next opening&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Because it is evaluated rather than diffed, a watch survives the messy cases:&lt;br&gt;
providers added and removed, regional variants, and models that briefly appear&lt;br&gt;
and disappear.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hear about downgrades too
&lt;/h2&gt;

&lt;p&gt;Compliance moves in both directions. When a provider stops meeting your policy&lt;br&gt;
— a certification lapses, or its data policy changes to allow training on API&lt;br&gt;
data — routing silently narrows. A downgrade alert names the failed&lt;br&gt;
requirements, and for owners and admins it lists the models your organization&lt;br&gt;
ran on that provider in the last 30 days that no longer have a compliant&lt;br&gt;
alternative, so you know what to migrate before someone's request 403s.&lt;/p&gt;

&lt;p&gt;Edits to your own policy never trigger downgrade alerts. Tightening a&lt;br&gt;
requirement is a decision you already made; only a change on the provider's&lt;br&gt;
side is news.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recipients by role, not by checkbox
&lt;/h2&gt;

&lt;p&gt;Instead of ticking individual people — unworkable once an org has dozens of&lt;br&gt;
members — you choose the lowest role that should hear about it:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audience&lt;/th&gt;
&lt;th&gt;Who receives alerts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Owners only&lt;/td&gt;
&lt;td&gt;Organization owners&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Owners and admins (default)&lt;/td&gt;
&lt;td&gt;Owners and admins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Everyone in the organization&lt;/td&gt;
&lt;td&gt;All members, including project-scoped roles&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each level includes the roles above it, and membership is resolved when the&lt;br&gt;
alert fires, so new hires and role changes are picked up without anyone&lt;br&gt;
revisiting the settings. Individual recipients can still turn off in-app or&lt;br&gt;
email delivery for their own account from the notification bell.&lt;/p&gt;

&lt;h2&gt;
  
  
  Delivery: in-app, email, and Slack
&lt;/h2&gt;

&lt;p&gt;In-app and email alerts go to each recipient; email only ever goes to verified&lt;br&gt;
addresses. Slack is org-wide: save an incoming webhook once under &lt;strong&gt;Preferences&lt;br&gt;
→ Notification Channels&lt;/strong&gt;, send a test message to confirm it, then enable Slack&lt;br&gt;
in the alert settings. Slack receives one post per event no matter how large&lt;br&gt;
the audience, which makes it the right channel for a shared&lt;br&gt;
&lt;code&gt;#ai-platform&lt;/code&gt; room.&lt;/p&gt;

&lt;p&gt;The webhook URL is stored encrypted and only ever displayed masked, and only&lt;br&gt;
&lt;code&gt;https://hooks.slack.com/services/…&lt;/code&gt; URLs are accepted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Enable a &lt;a href="https://docs.llmgateway.io/features/compliance" rel="noopener noreferrer"&gt;provider compliance policy&lt;/a&gt; on the Compliance page — requirements, allowed headquarters countries, and any provider or model restrictions.&lt;/li&gt;
&lt;li&gt;Scroll to &lt;strong&gt;Compliance Alerts&lt;/strong&gt; and watch the models you are waiting on. The first watch saves the defaults: owners and admins, in-app and email, downgrade alerts on.&lt;/li&gt;
&lt;li&gt;Optionally connect Slack, then adjust the audience.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Compliance alerts are available on the &lt;strong&gt;Enterprise plan&lt;/strong&gt;, alongside the&lt;br&gt;
compliance policy itself. Owners and admins configure them, every change is&lt;br&gt;
recorded in the &lt;a href="https://docs.llmgateway.io/features/audit-logs" rel="noopener noreferrer"&gt;audit log&lt;/a&gt;, and&lt;br&gt;
an organization can watch up to 100 models.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://llmgateway.io/signup" rel="noopener noreferrer"&gt;Try LLM Gateway free&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://docs.llmgateway.io/features/compliance" rel="noopener noreferrer"&gt;Compliance alerts documentation&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://llmgateway.io/blog/llm-compliance-checklist" rel="noopener noreferrer"&gt;The LLM compliance checklist&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>LLM Cost Optimization at $100k a Month</title>
      <dc:creator>smakosh</dc:creator>
      <pubDate>Sat, 26 Sep 2026 12:58:31 +0000</pubDate>
      <link>https://dev.to/smakosh/llm-cost-optimization-at-100k-a-month-2cni</link>
      <guid>https://dev.to/smakosh/llm-cost-optimization-at-100k-a-month-2cni</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://llmgateway.io/blog/llm-routing-savings-100k" rel="noopener noreferrer"&gt;LLM Gateway&lt;/a&gt;. Disclosure: I work on LLM Gateway; this republication was prepared with AI assistance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you spend $100,000 a month on inference, the largest line item is usually&lt;br&gt;
not a model that is too expensive. It is a model that is too expensive &lt;strong&gt;for&lt;br&gt;
part of your traffic&lt;/strong&gt;. The same endpoint answers "reword this paragraph" and&lt;br&gt;
"find the race condition in this scheduler", and if you pinned a frontier model&lt;br&gt;
to be safe, you are paying frontier prices for the first one several million&lt;br&gt;
times a month.&lt;/p&gt;

&lt;p&gt;This post is a worked model of &lt;strong&gt;LLM cost optimization&lt;/strong&gt; through difficulty-based&lt;br&gt;
routing at that scale. Every price below is the current list price from the&lt;br&gt;
&lt;a href="https://llmgateway.io/models" rel="noopener noreferrer"&gt;LLM Gateway catalogue&lt;/a&gt;; every assumption is&lt;br&gt;
stated so you can substitute your own.&lt;/p&gt;

&lt;h2&gt;
  
  
  The assumptions, stated up front
&lt;/h2&gt;

&lt;p&gt;This is a model, not a measurement. It rests on four things, and if any of them&lt;br&gt;
are wrong for you the answer changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A representative request is 2,000 input tokens and 500 output tokens.&lt;/strong&gt; Long
context shifts the arithmetic toward input price; heavy generation shifts it
toward output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prices are Anthropic first-party list prices&lt;/strong&gt;, as served through the gateway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traffic mixes are illustrative.&lt;/strong&gt; The whole result hinges on what fraction of
your requests are genuinely easy, and that is the number you should measure
rather than borrow from a blog post.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality is held constant by assumption.&lt;/strong&gt; In reality, routing trades some
quality risk on the traffic you push down. More on that at the end.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At those token counts the three models cost:&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 / output per 1M&lt;/th&gt;
&lt;th&gt;Cost per request&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Haiku 4.5&lt;/td&gt;
&lt;td&gt;$1.00 / $5.00&lt;/td&gt;
&lt;td&gt;$0.0045&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 4.6&lt;/td&gt;
&lt;td&gt;$3.00 / $15.00&lt;/td&gt;
&lt;td&gt;$0.0135&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 4.6&lt;/td&gt;
&lt;td&gt;$5.00 / $25.00&lt;/td&gt;
&lt;td&gt;$0.0225&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Case 1: you pinned the frontier model
&lt;/h2&gt;

&lt;p&gt;$100,000 a month at $0.0225 a request is about &lt;strong&gt;4.4 million requests&lt;/strong&gt;. Now&lt;br&gt;
route them by difficulty instead, into Low / Medium / High bands backed by those&lt;br&gt;
three models:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Traffic mix (Haiku / Sonnet / Opus)&lt;/th&gt;
&lt;th&gt;Inference&lt;/th&gt;
&lt;th&gt;Classifier&lt;/th&gt;
&lt;th&gt;Net saving&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Conservative — 20 / 50 / 30&lt;/td&gt;
&lt;td&gt;$64,000&lt;/td&gt;
&lt;td&gt;$467&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$35,500 (36%)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical — 40 / 40 / 20&lt;/td&gt;
&lt;td&gt;$52,000&lt;/td&gt;
&lt;td&gt;$467&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$47,500 (48%)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aggressive — 60 / 30 / 10&lt;/td&gt;
&lt;td&gt;$40,000&lt;/td&gt;
&lt;td&gt;$467&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$59,500 (60%)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Even the conservative mix — where 30% of traffic still goes to Opus and only a&lt;br&gt;
fifth drops to Haiku — takes a third off the bill. The classifier is under half&lt;br&gt;
a percent of the saving in every row.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 2: you pinned the mid-tier model
&lt;/h2&gt;

&lt;p&gt;Pinning Sonnet is the more common starting point, and the honest one to model,&lt;br&gt;
because the headline number is smaller. $100,000 at $0.0135 is about &lt;strong&gt;7.4&lt;br&gt;
million requests&lt;/strong&gt;, and now routing cuts both ways: some traffic moves down to&lt;br&gt;
Haiku, but some moves &lt;em&gt;up&lt;/em&gt; to Opus.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Traffic mix (Haiku / Sonnet / Opus)&lt;/th&gt;
&lt;th&gt;Inference&lt;/th&gt;
&lt;th&gt;Classifier&lt;/th&gt;
&lt;th&gt;Net saving&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Conservative — 30 / 55 / 15&lt;/td&gt;
&lt;td&gt;$90,000&lt;/td&gt;
&lt;td&gt;$778&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$9,200 (9%)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical — 45 / 40 / 15&lt;/td&gt;
&lt;td&gt;$80,000&lt;/td&gt;
&lt;td&gt;$778&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$19,200 (19%)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aggressive — 60 / 30 / 10&lt;/td&gt;
&lt;td&gt;$66,700&lt;/td&gt;
&lt;td&gt;$778&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$32,600 (33%)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Smaller, but note what you are buying alongside it: 15% of your traffic now&lt;br&gt;
reaches a frontier model it previously did not. That is a quality gain you were&lt;br&gt;
not getting before, paid for out of the savings on the easy half.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the classifier costs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.llmgateway.io/features/routing" rel="noopener noreferrer"&gt;TypeSafe's Jev&lt;/a&gt; decision model is&lt;br&gt;
&lt;strong&gt;$0.042 per million input tokens, with output priced at zero&lt;/strong&gt;. One&lt;br&gt;
classification is the rubric plus a bounded slice of the request:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Input tokens&lt;/th&gt;
&lt;th&gt;Cost per call&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Short prompt, 3 configured models&lt;/td&gt;
&lt;td&gt;~1,100&lt;/td&gt;
&lt;td&gt;$0.000046&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mid prompt, ~10 models&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;$0.000105&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Capped state, 30 models&lt;/td&gt;
&lt;td&gt;~4,000&lt;/td&gt;
&lt;td&gt;$0.000168&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;About &lt;strong&gt;$0.0001 a call, or 10,000 classifications per dollar&lt;/strong&gt;. Each call is&lt;br&gt;
billed to your account as its own log entry, against the same project and API&lt;br&gt;
key as the request that triggered it — so the line above is something you can&lt;br&gt;
read off your own usage rather than a figure you have to model. The rubric grows&lt;br&gt;
with your model list — each configured model contributes its name, description&lt;br&gt;
and price band to the question — so a 30-model list costs roughly twice a&lt;br&gt;
3-model list per call.&lt;/p&gt;

&lt;p&gt;And a request carrying a session id is classified &lt;strong&gt;once for the whole&lt;br&gt;
conversation&lt;/strong&gt;, not once per turn. For agent or chat traffic averaging ten turns,&lt;br&gt;
every classifier figure above divides by ten.&lt;/p&gt;

&lt;h2&gt;
  
  
  The break-even is about 1%
&lt;/h2&gt;

&lt;p&gt;The cleanest way to think about whether this is worth switching on:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Moving one request from Sonnet to Haiku saves $0.009. A classification costs&lt;br&gt;
$0.000105. The classifier pays for itself if &lt;strong&gt;more than about 1.2%&lt;/strong&gt; of your&lt;br&gt;
requests move down a band.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Below that threshold your traffic is uniformly hard and you should pin a model&lt;br&gt;
and skip the classifier. Above it — and almost all mixed production traffic is&lt;br&gt;
well above it — the classifier is noise against the saving. That asymmetry is&lt;br&gt;
the actual argument for difficulty routing: the downside is bounded at a tenth&lt;br&gt;
of a percent of spend, and the upside is tens of percent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this model is optimistic
&lt;/h2&gt;

&lt;p&gt;Three honest caveats, because a savings estimate with no failure modes is a&lt;br&gt;
sales pitch:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quality is not free.&lt;/strong&gt; Every request you push to a cheaper model is a bet that&lt;br&gt;
the cheaper model handles it. A classifier makes that bet better than a coin&lt;br&gt;
flip, but it does not make it free. Measure output quality on the traffic that&lt;br&gt;
moves down, not just the invoice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your mix is probably not ours.&lt;/strong&gt; The 40/40/20 row is an illustration. Run your&lt;br&gt;
own traffic through a classifier in observe-only mode — point the Low and Medium&lt;br&gt;
bands at the model you already use — and read the recorded difficulty&lt;br&gt;
distribution off your logs before you change any routing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cheap traffic changes the ratio.&lt;/strong&gt; These numbers assume a $0.0135–$0.0225&lt;br&gt;
average request. If your average request costs $0.002, the classifier is around&lt;br&gt;
5% of spend rather than 0.5%, and the case is weaker unless sessions amortize it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running it
&lt;/h2&gt;

&lt;p&gt;On LLM Gateway this is configuration, not code. Choose the models &lt;code&gt;smart&lt;/code&gt; may&lt;br&gt;
resolve to and the classifier, and the gateway sorts them into price bands and&lt;br&gt;
routes each request to the matching one. Every decision — the difficulty, the&lt;br&gt;
task type, the candidates, the model chosen — lands on the request's log entry,&lt;br&gt;
so you can audit the mix you actually got against the mix you assumed here.&lt;/p&gt;

&lt;p&gt;Smart routing itself carries no platform fee: you pay for the models it selects&lt;br&gt;
and for each classifier call, at the rates above. A verdict reused from a sticky&lt;br&gt;
session and a classifier call that fails are both charged nothing. It is&lt;br&gt;
available to every organization including pay-as-you-go while it is in beta; it&lt;br&gt;
is not available on DevPass yet. If you want the routing logic explicit instead, a&lt;br&gt;
&lt;a href="https://docs.llmgateway.io/features/dynamic-routes" rel="noopener noreferrer"&gt;dynamic route&lt;/a&gt; can branch on&lt;br&gt;
the same verdict.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://llmgateway.io/signup" rel="noopener noreferrer"&gt;Try LLM Gateway free&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://docs.llmgateway.io/features/routing" rel="noopener noreferrer"&gt;Smart routing documentation&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://llmgateway.io/blog/automatic-model-selection" rel="noopener noreferrer"&gt;Automatic model selection by request difficulty&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>performance</category>
    </item>
    <item>
      <title>Automatic Model Selection by Request Difficulty</title>
      <dc:creator>smakosh</dc:creator>
      <pubDate>Sat, 26 Sep 2026 12:57:58 +0000</pubDate>
      <link>https://dev.to/smakosh/automatic-model-selection-by-request-difficulty-1koe</link>
      <guid>https://dev.to/smakosh/automatic-model-selection-by-request-difficulty-1koe</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://llmgateway.io/blog/automatic-model-selection" rel="noopener noreferrer"&gt;LLM Gateway&lt;/a&gt;. Disclosure: I work on LLM Gateway; this republication was prepared with AI assistance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most production traffic is not uniform. The same endpoint gets "reword this&lt;br&gt;
paragraph" and "find the race condition in this scheduler" within a second of&lt;br&gt;
each other, and both are billed at whatever model you hardcoded. Pin a frontier&lt;br&gt;
model and you overpay for the easy half. Pin a cheap one and the hard half&lt;br&gt;
comes back wrong.&lt;/p&gt;

&lt;p&gt;The usual workaround is to classify requests in your own application code and&lt;br&gt;
pick a model per branch — which means maintaining a prompt, a model list, and a&lt;br&gt;
fallback path that all drift from the catalogue. &lt;strong&gt;LLM Gateway&lt;/strong&gt; now does&lt;br&gt;
&lt;strong&gt;smart routing&lt;/strong&gt; for you, and reads the request before deciding.&lt;/p&gt;
&lt;h2&gt;
  
  
  Choose the models, choose the classifier
&lt;/h2&gt;

&lt;p&gt;Sending &lt;code&gt;"model": "auto"&lt;/code&gt; picks the cheapest model that fits the request, from&lt;br&gt;
a fixed list. Smart routing is a separate model string, &lt;code&gt;"model": "smart"&lt;/code&gt;,&lt;br&gt;
where you control the candidate list and how it is ranked — &lt;code&gt;auto&lt;/code&gt; keeps its&lt;br&gt;
current behaviour for existing callers. Under &lt;strong&gt;Organization settings → Smart Routing&lt;/strong&gt;, pick up to 30 models&lt;br&gt;
from the &lt;a href="https://llmgateway.io/models" rel="noopener noreferrer"&gt;catalogue&lt;/a&gt; and a classifier. A project&lt;br&gt;
can override the organization default on its own routing settings page.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Classifier&lt;/th&gt;
&lt;th&gt;Behavior&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pick the cheapest model on your list that can serve the request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jev (TypeSafe)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rate the request first, then serve it from the matching price band&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;With the Jev classifier, your models are sorted by blended average price and&lt;br&gt;
split into Low, Medium and High bands — the dashboard shows which model lands&lt;br&gt;
in which band before you save. Each request is then rated for difficulty, task&lt;br&gt;
type and output type and served from the matching band.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.llmgateway.io/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$LLM_GATEWAY_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "smart",
    "messages": [{"role": "user", "content": "Prove this queue is linearizable."}]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nothing about your request changes. The same call that used to resolve to a&lt;br&gt;
fixed cheap model now resolves to whichever of your models the request actually&lt;br&gt;
warrants.&lt;/p&gt;
&lt;h2&gt;
  
  
  Your list is a boundary, not a preference
&lt;/h2&gt;

&lt;p&gt;This is the part worth being precise about, because it is what makes the&lt;br&gt;
feature safe to turn on for a whole organization.&lt;/p&gt;

&lt;p&gt;If no model on your list can serve a request — an image request against a&lt;br&gt;
text-only list, say — the gateway returns a &lt;code&gt;400&lt;/code&gt;. It does not quietly fall&lt;br&gt;
back to a model you did not approve. &lt;code&gt;free_models_only&lt;/code&gt; narrows your list to&lt;br&gt;
its free models rather than replacing it, so a request parameter cannot route&lt;br&gt;
outside what you configured.&lt;/p&gt;

&lt;p&gt;The classifier itself fails open in the other direction. A timeout, an outage,&lt;br&gt;
a missing credential, or a compliance policy that blocks the classifier's&lt;br&gt;
provider all fall back to the cheapest eligible model on your list. A&lt;br&gt;
classifier problem slows a request down; it never fails one.&lt;/p&gt;
&lt;h2&gt;
  
  
  One verdict per conversation
&lt;/h2&gt;

&lt;p&gt;Rating every turn of a long chat would be both wasteful and wrong. Wasteful&lt;br&gt;
because you pay for a classifier call per turn; wrong because a conversation&lt;br&gt;
that hops between models loses the upstream prompt cache it had been building.&lt;/p&gt;

&lt;p&gt;So a request carrying a session id is classified once. The rest of the&lt;br&gt;
conversation reuses that verdict and the model it resolved to, for the duration&lt;br&gt;
of the &lt;a href="https://docs.llmgateway.io/features/routing#sticky-session-routing" rel="noopener noreferrer"&gt;sticky session&lt;/a&gt;.&lt;br&gt;
Driving a coding agent through the gateway, a full multi-turn task makes&lt;br&gt;
exactly one classifier call.&lt;/p&gt;
&lt;h2&gt;
  
  
  Branch on the verdict in a dynamic route
&lt;/h2&gt;

&lt;p&gt;If you want the routing logic explicit rather than implicit,&lt;br&gt;
&lt;a href="https://docs.llmgateway.io/features/dynamic-routes" rel="noopener noreferrer"&gt;dynamic routes&lt;/a&gt; gain a&lt;br&gt;
&lt;code&gt;classifier&lt;/code&gt; node that branches on the same verdict:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rate"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"classifier"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"kind"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"jev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"on"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"difficulty"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cases"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"high"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"next"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"frontier"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"low"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"next"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cheap"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"else"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"balanced"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;on&lt;/code&gt; also accepts &lt;code&gt;task&lt;/code&gt; and &lt;code&gt;outputType&lt;/code&gt;, so you can send coding traffic one&lt;br&gt;
way and summarization another. Only graphs containing a classifier node pay for&lt;br&gt;
the call, and &lt;code&gt;else&lt;/code&gt; covers both an unmatched answer and no verdict at all —&lt;br&gt;
give it a real model rather than a reject branch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every decision is on the log
&lt;/h2&gt;

&lt;p&gt;Routing you cannot audit is routing you cannot trust. Each request records the&lt;br&gt;
classifier used, the candidates it chose between, the difficulty, task and&lt;br&gt;
output type, the band served, the selected model, and whether the verdict was&lt;br&gt;
reused from earlier in the session. It is all on the request's entry in the&lt;br&gt;
activity view, and it is cleared along with the rest of the request payload&lt;br&gt;
when your data retention window elapses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;Organization settings → Smart Routing&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Pick the models &lt;code&gt;smart&lt;/code&gt; may resolve to and check the band preview.&lt;/li&gt;
&lt;li&gt;Choose a classifier, save, and send &lt;code&gt;"model": "smart"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Override it per project from that project's routing settings if a workload
needs a different list.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Owners and organization admins set the default; project admins can override it.&lt;br&gt;
The routing itself carries no platform fee: you pay for the models it selects,&lt;br&gt;
plus each classifier call at its catalogue rate — about $0.0001, recorded as its&lt;br&gt;
own log entry against the same project and API key.&lt;br&gt;
If you are weighing this against routing by hand, the arithmetic in&lt;br&gt;
&lt;a href="https://llmgateway.io/blog/cut-llm-costs-with-request-routing" rel="noopener noreferrer"&gt;cutting LLM costs with request routing&lt;/a&gt;&lt;br&gt;
still applies — this is the same idea, with the classification and the fallback&lt;br&gt;
handled for you.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://llmgateway.io/signup" rel="noopener noreferrer"&gt;Try LLM Gateway free&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://docs.llmgateway.io/features/routing" rel="noopener noreferrer"&gt;Smart routing documentation&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://llmgateway.io/blog/cut-llm-costs-with-request-routing" rel="noopener noreferrer"&gt;Cut LLM costs with request routing&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>backend</category>
      <category>llm</category>
    </item>
    <item>
      <title>Smart Routing Benchmark: Cost and Quality</title>
      <dc:creator>smakosh</dc:creator>
      <pubDate>Sat, 26 Sep 2026 12:57:55 +0000</pubDate>
      <link>https://dev.to/smakosh/smart-routing-benchmark-cost-and-quality-49e9</link>
      <guid>https://dev.to/smakosh/smart-routing-benchmark-cost-and-quality-49e9</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://llmgateway.io/blog/smart-routing-benchmark" rel="noopener noreferrer"&gt;LLM Gateway&lt;/a&gt;. Disclosure: I work on LLM Gateway; this republication was prepared with AI assistance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Routing a prompt to a cheaper model only helps if the answer is useful. We ran a&lt;br&gt;
live &lt;strong&gt;Smart Routing benchmark&lt;/strong&gt; through &lt;strong&gt;LLM Gateway&lt;/strong&gt; to measure both sides:&lt;br&gt;
the complete request cost and whether the output passed its task's checks.&lt;/p&gt;

&lt;p&gt;Smart Routing cost &lt;strong&gt;33.2% less than the fixed premium baseline&lt;/strong&gt; in the primary run. It also cost &lt;strong&gt;35.6× as much as the fixed low-cost baseline&lt;/strong&gt;. The savings estimate was uncertain, and the cheaper fixed baselines remained competitive on task success.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compare the same prompts
&lt;/h2&gt;

&lt;p&gt;We fixed 80 prompts before collecting results and sent each through four arms:&lt;br&gt;
Smart Routing, a fixed low-cost model, a fixed mid-priced model, and a fixed&lt;br&gt;
premium model. We ran the full comparison at two output caps, for 640 measured requests.&lt;br&gt;
Prompt order and arm order were shuffled using a recorded seed.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://llmgateway.io/benchmarks/smart-routing-2026-09-26-protocol.json" rel="noopener noreferrer"&gt;protocol&lt;/a&gt; contains the&lt;br&gt;
exact baseline model IDs, prompts, order, and dataset hash. The &lt;a href="https://llmgateway.io/benchmarks/smart-routing-2026-09-26-results.json" rel="noopener noreferrer"&gt;results&lt;/a&gt; contain the selected&lt;br&gt;
models, responses, scores, token counts, normalized costs, and timing data.&lt;br&gt;
These snapshots make the run auditable. The fixed mid-priced baseline was&lt;br&gt;
outside the configured candidate pool; the low-cost and premium baselines were&lt;br&gt;
in it. Baseline labels describe this comparison, not the router’s price bands.&lt;br&gt;
The results record the actual eligible pool and decision for each routed call.&lt;br&gt;
For current availability, use the &lt;a href="https://llmgateway.io/models" rel="noopener noreferrer"&gt;model catalogue&lt;/a&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workload&lt;/th&gt;
&lt;th&gt;Prompts&lt;/th&gt;
&lt;th&gt;What the check measures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Easy tasks&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;Arithmetic, extraction, sorting, case conversion, sentiment labels&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exact-answer reasoning&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;Reference answers for math, algorithms, logic, and code tracing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Instruction following&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;40 sampled cases from 334 supported IFEval cases&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The IFEval subset uses &lt;a href="https://github.com/google-research/google-research/tree/d36068b845da4c2b24927fee2cea1e6ef98dadda/instruction_following_eval" rel="noopener noreferrer"&gt;Google Research's dataset&lt;/a&gt;.&lt;br&gt;
Its score checks instructions such as avoiding commas or formatting an answer&lt;br&gt;
as JSON. It does &lt;strong&gt;not&lt;/strong&gt; establish factual accuracy or writing quality. We&lt;br&gt;
cross-checked the stored outputs against the official evaluator and independently&lt;br&gt;
verified all 15 exact-answer reference solutions. This is a&lt;br&gt;
subset score, not a full IFEval leaderboard result.&lt;/p&gt;

&lt;p&gt;The primary comparison uses the same 8,192-token output limit for every arm.&lt;br&gt;
The initial run used a 4,096-token cap. During that run, we found that this&lt;br&gt;
prevents Smart Routing from raising reasoning effort for high-difficulty&lt;br&gt;
requests. We completed that round and repeated the entire comparison at&lt;br&gt;
8,192 tokens to exercise that behavior. The &lt;a href="https://llmgateway.io/benchmarks/smart-routing-2026-09-26-4096-protocol.json" rel="noopener noreferrer"&gt;initial protocol&lt;/a&gt; and &lt;a href="https://llmgateway.io/benchmarks/smart-routing-2026-09-26-4096-results.json" rel="noopener noreferrer"&gt;initial results&lt;/a&gt; are also&lt;br&gt;
available. Requests ran serially with&lt;br&gt;
gateway response caching and cross-provider fallback disabled. The fixed-model&lt;br&gt;
arms still use gateway provider selection; they do not pin a provider. Provider-side&lt;br&gt;
prompt caching could still occur. We left reasoning and temperature at their&lt;br&gt;
defaults, including Smart Routing's automatic reasoning adjustment. This tests&lt;br&gt;
the configured service end to end, rather than isolating the classifier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the Smart Routing benchmark results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Arm&lt;/th&gt;
&lt;th&gt;Cost index&lt;/th&gt;
&lt;th&gt;Strict pass&lt;/th&gt;
&lt;th&gt;Scoring sensitivity&lt;/th&gt;
&lt;th&gt;Median client time&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Smart Routing&lt;/td&gt;
&lt;td&gt;66.82&lt;/td&gt;
&lt;td&gt;75/80&lt;/td&gt;
&lt;td&gt;75/79&lt;/td&gt;
&lt;td&gt;6.48s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed low-cost&lt;/td&gt;
&lt;td&gt;1.88&lt;/td&gt;
&lt;td&gt;74/80&lt;/td&gt;
&lt;td&gt;74/79&lt;/td&gt;
&lt;td&gt;5.12s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed mid-priced&lt;/td&gt;
&lt;td&gt;18.13&lt;/td&gt;
&lt;td&gt;76/80&lt;/td&gt;
&lt;td&gt;76/79&lt;/td&gt;
&lt;td&gt;4.86s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed premium&lt;/td&gt;
&lt;td&gt;100.00&lt;/td&gt;
&lt;td&gt;74/80&lt;/td&gt;
&lt;td&gt;79/79&lt;/td&gt;
&lt;td&gt;6.85s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe76ekv19c9udclrwreah.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe76ekv19c9udclrwreah.png" alt="Total cost, strict task success, and ambiguity-adjusted task success at the 8,192-token cap" width="800" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cost is indexed to the fixed premium arm's total, set to 100. Lower is cheaper.&lt;br&gt;
The total includes the response's inference charge, the separate Jev classifier&lt;br&gt;
charge, and storage for both. Classifier charges came from the actual request&lt;br&gt;
records; they were not inferred from a typical price per call.&lt;/p&gt;

&lt;p&gt;Against the premium baseline, the paired 95% interval ranged from &lt;strong&gt;4.3% higher cost to 66.1% lower cost&lt;/strong&gt;. It includes no savings, so this small sample does not establish a reliable reduction. Against the mid-priced baseline, Smart Routing cost 3.69× as much (paired interval: 1.90× to 5.99×). Against the low-cost baseline, Smart Routing cost 35.57× as much (paired interval: 20.11× to 51.97×).&lt;/p&gt;

&lt;p&gt;Classification and its storage accounted for 0.53% of Smart Routing’s total bill. Most of the routed cost came from the selected models.&lt;/p&gt;

&lt;p&gt;Latency is measured at the client and includes network and gateway delays.&lt;br&gt;
During the run, some client timings substantially exceeded the logged inference&lt;br&gt;
duration; both are available in the data. These timings describe this run’s&lt;br&gt;
conditions, not a model-speed guarantee. Smart Routing’s client p95 was 66.57s,&lt;br&gt;
compared with 41.09s for the premium baseline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check the failures before switching
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Arm&lt;/th&gt;
&lt;th&gt;Easy tasks&lt;/th&gt;
&lt;th&gt;Exact-answer reasoning&lt;/th&gt;
&lt;th&gt;IFEval subset&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Smart Routing&lt;/td&gt;
&lt;td&gt;25/25&lt;/td&gt;
&lt;td&gt;12/15&lt;/td&gt;
&lt;td&gt;38/40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed low-cost&lt;/td&gt;
&lt;td&gt;25/25&lt;/td&gt;
&lt;td&gt;12/15&lt;/td&gt;
&lt;td&gt;37/40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed mid-priced&lt;/td&gt;
&lt;td&gt;25/25&lt;/td&gt;
&lt;td&gt;14/15&lt;/td&gt;
&lt;td&gt;37/40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed premium&lt;/td&gt;
&lt;td&gt;20/25&lt;/td&gt;
&lt;td&gt;15/15&lt;/td&gt;
&lt;td&gt;39/40&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Smart Routing had one provider access error and one client timeout. The low-cost baseline had one output-limit truncation. The other fixed arms completed without request errors or truncations. A timed-out stream counts as a failed, billed request; its recorded inference charge is included even though the client received only part of the answer.&lt;/p&gt;

&lt;p&gt;We kept failures and truncated responses in the denominator. We also audited&lt;br&gt;
the scoring rules. One IFEval prompt requires repeating text containing a word&lt;br&gt;
twice while allowing that word fewer than twice in the response. Five easy&lt;br&gt;
case-conversion prompts have ambiguous trailing punctuation. The original&lt;br&gt;
strict scores remain above; a sensitivity check removes the contradictory&lt;br&gt;
prompt for every arm and accepts an optional final period on those five tasks.&lt;/p&gt;

&lt;p&gt;The sensitivity check puts Smart Routing at &lt;strong&gt;75/79&lt;/strong&gt;, compared with &lt;strong&gt;74/79&lt;/strong&gt; for the low-cost baseline, &lt;strong&gt;76/79&lt;/strong&gt; for the mid-priced baseline, and &lt;strong&gt;79/79&lt;/strong&gt; for the premium baseline. The premium arm’s six strict failures were all covered by these ambiguity adjustments; its original 74/80 should not be read as evidence that routing improved answer quality.&lt;/p&gt;

&lt;p&gt;The original strict pass-rate difference versus premium was 1.25 percentage points, with a paired 95% interval from -5.00 to 7.50 points. This does not establish equivalent quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check sensitivity to the output cap
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Output cap&lt;/th&gt;
&lt;th&gt;Smart cost vs premium&lt;/th&gt;
&lt;th&gt;Smart strict pass&lt;/th&gt;
&lt;th&gt;Low-cost strict pass&lt;/th&gt;
&lt;th&gt;Mid-priced strict pass&lt;/th&gt;
&lt;th&gt;Premium strict pass&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;4,096&lt;/td&gt;
&lt;td&gt;62.6% lower&lt;/td&gt;
&lt;td&gt;71/80&lt;/td&gt;
&lt;td&gt;75/80&lt;/td&gt;
&lt;td&gt;74/80&lt;/td&gt;
&lt;td&gt;73/80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8,192&lt;/td&gt;
&lt;td&gt;33.2% lower&lt;/td&gt;
&lt;td&gt;75/80&lt;/td&gt;
&lt;td&gt;74/80&lt;/td&gt;
&lt;td&gt;76/80&lt;/td&gt;
&lt;td&gt;74/80&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The higher-cap request logs confirm medium reasoning on both high-difficulty routed requests. On the recurrence task, the routed response changed from an incorrect answer in the lower-cap run to the correct answer in the higher-cap run. That routed request cost more in the higher-cap run.&lt;/p&gt;

&lt;p&gt;These are separate live runs. Sampling and provider conditions can change&lt;br&gt;
between them, so their difference does not isolate the causal effect of the cap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat this as a pilot
&lt;/h2&gt;

&lt;p&gt;We built Smart Routing and ran this evaluation ourselves. The &lt;a href="https://github.com/theopenco/llmgateway/tree/main/scripts/benchmarks" rel="noopener noreferrer"&gt;runner and analysis scripts&lt;/a&gt;&lt;br&gt;
are available for inspection and reproduction.&lt;/p&gt;

&lt;p&gt;This is a deliberately mixed, single-turn, text-only workload. It does not&lt;br&gt;
represent a particular application's production traffic, long-context work,&lt;br&gt;
tool use, or sessions. Enabling fallback can change failure rates and cost;&lt;br&gt;
session reuse can spread classifier cost across multiple turns. The model pool&lt;br&gt;
and provider conditions are a snapshot&lt;br&gt;
from the run. One response per model and prompt also leaves sampling variation&lt;br&gt;
unmeasured.&lt;/p&gt;

&lt;p&gt;The confidence intervals resample paired prompts within the three workload&lt;br&gt;
groups. They quantify uncertainty within this sample; they do not establish&lt;br&gt;
quality equivalence or predict performance after model or routing changes.&lt;/p&gt;

&lt;p&gt;Use the model you would actually replace as the baseline. The mid-priced arm cost 72.9% less than Smart Routing and passed 76/80 tasks against its 75/80. The low-cost arm was much cheaper again, with one fewer passing task than Smart Routing. Those fixed baselines deserve consideration alongside routing. Smart Routing can lower a premium-model bill, but this pilot does not justify a blanket claim of equal quality at lower cost. Repeat the paired comparison on representative application tasks and with the candidate pool you plan to deploy.&lt;/p&gt;

&lt;p&gt;Smart Routing is available to every organization while in beta, excluding&lt;br&gt;
DevPass. Choose the candidate models and Jev classifier under organization&lt;br&gt;
Smart Routing settings or a project's Routing settings. There is no additional&lt;br&gt;
routing platform fee; inference and successful classifier calls are billed.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://llmgateway.io/signup" rel="noopener noreferrer"&gt;Try LLM Gateway&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://docs.llmgateway.io/features/routing#smart-routing" rel="noopener noreferrer"&gt;Read the Smart Routing documentation&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://llmgateway.io/blog/automatic-model-selection" rel="noopener noreferrer"&gt;How automatic model selection works&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>performance</category>
    </item>
    <item>
      <title>OpenRouter vs Vercel vs LLMGateway Performance</title>
      <dc:creator>smakosh</dc:creator>
      <pubDate>Wed, 22 Jul 2026 17:43:45 +0000</pubDate>
      <link>https://dev.to/smakosh/openrouter-vs-vercel-vs-llmgateway-performance-1f6a</link>
      <guid>https://dev.to/smakosh/openrouter-vs-vercel-vs-llmgateway-performance-1f6a</guid>
      <description>&lt;p&gt;Every AI gateway adds a hop between your app and the model. The question that matters is what that hop costs at the moment your user is staring at a blank chat window: the time to first token. Most gateway latency debates skip the measurement and argue architecture — so we measured it.&lt;/p&gt;

&lt;p&gt;We ran an open-source TTFT benchmark against &lt;strong&gt;LLM Gateway&lt;/strong&gt; and OpenRouter, interleaved, from the same machine, on the same model. The medians over 75 runs each: LLM Gateway got the first content token in 906ms on a cold connection and 814ms on a warm one. OpenRouter took 1392ms and 1232ms. That is roughly 35% faster cold and 34% faster warm, with zero errors across the 300 measured runs — 450 HTTP requests in total, counting the throwaway warm-up call that precedes each warm measurement, every one of which returned HTTP 200. The raw per-run data is &lt;a href="https://gist.github.com/smakosh/0ca360230fb267d375b91dbd50548b67" rel="noopener noreferrer"&gt;published in full&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we measured AI gateway performance
&lt;/h2&gt;

&lt;p&gt;We used &lt;a href="https://github.com/rbadillap/ai-gateways-benchmark" rel="noopener noreferrer"&gt;ai-gateways-benchmark&lt;/a&gt;, an open-source script by Ronny Badilla that recently made the rounds comparing Vercel AI Gateway, OpenRouter, and Cloudflare AI Gateway. It is Python stdlib only — raw sockets, no HTTP library — and it times every phase of a streaming request separately: DNS, TCP connect, TLS handshake, TTFB (request sent to first response byte), and TTFT (request sent to first content token in the SSE stream).&lt;/p&gt;

&lt;p&gt;That separation is the point. "Gateway latency" claims usually conflate connection cost, edge proximity, and actual routing overhead. This tool splits them apart.&lt;/p&gt;

&lt;p&gt;Our setup, on July 22, 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Same model on both gateways&lt;/strong&gt;: claude-haiku-4.5, streaming, &lt;code&gt;max_tokens: 16&lt;/code&gt;, identical prompt&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;75 cold + 75 warm runs per gateway&lt;/strong&gt;, interleaved round-robin so time-of-day drift hits both equally&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cold&lt;/strong&gt; = a fresh connection paying full DNS + TCP + TLS with a new TLS context (no session resumption)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Warm&lt;/strong&gt; = a second request on an already-open socket — the connection-pool case your production traffic mostly lives in&lt;/li&gt;
&lt;li&gt;One residential vantage point, zero errors on either gateway across all 450 HTTP requests (including warm-ups)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Results: LLM Gateway vs OpenRouter
&lt;/h2&gt;

&lt;p&gt;Medians of n=75 per cell. Cold TTFT is end-to-end: DNS + TCP + TLS + time to first content token — what a short-lived process pays.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Medians&lt;/th&gt;
&lt;th&gt;TTFB (cold)&lt;/th&gt;
&lt;th&gt;TTFT (cold)&lt;/th&gt;
&lt;th&gt;TTFT (warm)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LLM Gateway&lt;/td&gt;
&lt;td&gt;201ms&lt;/td&gt;
&lt;td&gt;906ms&lt;/td&gt;
&lt;td&gt;814ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenRouter (direct)&lt;/td&gt;
&lt;td&gt;1369ms&lt;/td&gt;
&lt;td&gt;1392ms&lt;/td&gt;
&lt;td&gt;1232ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The spread, as median with p10–p90 range:&lt;/p&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;LLM Gateway&lt;/th&gt;
&lt;th&gt;OpenRouter&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cold TTFB&lt;/td&gt;
&lt;td&gt;201 (194–240)&lt;/td&gt;
&lt;td&gt;1369 (979–1643)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cold e2e TTFT&lt;/td&gt;
&lt;td&gt;906 (803–1380)&lt;/td&gt;
&lt;td&gt;1392 (1002–1675)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Warm TTFB&lt;/td&gt;
&lt;td&gt;176 (171–193)&lt;/td&gt;
&lt;td&gt;1229 (924–1500)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Warm TTFT&lt;/td&gt;
&lt;td&gt;814 (673–1379)&lt;/td&gt;
&lt;td&gt;1232 (924–1501)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two things stand out beyond the medians. LLM Gateway's p90 cold TTFT (1380ms) came in below OpenRouter's median — the slow tail of one distribution beat the middle of the other. And LLM Gateway's warm TTFB barely moves: 171–193ms across the p10–p90 range, which is the stability you want under a production connection pool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the time goes
&lt;/h2&gt;

&lt;p&gt;The phase breakdown shows the overhead is not in the connection:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Gateway&lt;/th&gt;
&lt;th&gt;DNS&lt;/th&gt;
&lt;th&gt;TCP&lt;/th&gt;
&lt;th&gt;TLS&lt;/th&gt;
&lt;th&gt;TTFB&lt;/th&gt;
&lt;th&gt;TTFT (request)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LLM Gateway&lt;/td&gt;
&lt;td&gt;3.2&lt;/td&gt;
&lt;td&gt;20.9&lt;/td&gt;
&lt;td&gt;40.2&lt;/td&gt;
&lt;td&gt;200.9&lt;/td&gt;
&lt;td&gt;829.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenRouter&lt;/td&gt;
&lt;td&gt;3.4&lt;/td&gt;
&lt;td&gt;7.2&lt;/td&gt;
&lt;td&gt;12.7&lt;/td&gt;
&lt;td&gt;1369.4&lt;/td&gt;
&lt;td&gt;1369.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;OpenRouter's edge actually wins the handshake — 13ms TLS vs our 40ms. It loses everything after the request is sent.&lt;/p&gt;

&lt;p&gt;One honest caveat on the TTFB column: it flatters LLM Gateway for an architectural reason. Our gateway starts the response stream in about 200ms, before the first upstream token arrives. OpenRouter holds its first byte until the first token is ready, so its TTFB equals its TTFT on every single run. TTFB tells you who streams headers early; TTFT is the number your users feel, and it is the honest headline of this post.&lt;/p&gt;

&lt;p&gt;A second caveat: each gateway ran its default routing for this model. OpenRouter picks its upstream per request (a request we inspected was served via Amazon Bedrock), while our runs were pinned to Anthropic's API. Both are what you get out of the box, but they are different upstreams.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Vercel AI Gateway compares
&lt;/h2&gt;

&lt;p&gt;We did not benchmark Vercel ourselves. The benchmark's author published his own run of the same script — from his vantage point, on a different date — comparing Vercel AI Gateway, OpenRouter, and Cloudflare AI Gateway proxying OpenRouter:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;His run (medians of n=5)&lt;/th&gt;
&lt;th&gt;TTFB&lt;/th&gt;
&lt;th&gt;TTFT (cold)&lt;/th&gt;
&lt;th&gt;TTFT (warm)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Vercel AI Gateway&lt;/td&gt;
&lt;td&gt;785ms&lt;/td&gt;
&lt;td&gt;1099ms&lt;/td&gt;
&lt;td&gt;822ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenRouter (direct)&lt;/td&gt;
&lt;td&gt;1100ms&lt;/td&gt;
&lt;td&gt;1123ms&lt;/td&gt;
&lt;td&gt;986ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare → OpenRouter&lt;/td&gt;
&lt;td&gt;1300ms&lt;/td&gt;
&lt;td&gt;1420ms&lt;/td&gt;
&lt;td&gt;1279ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These numbers are not directly comparable to ours — different location, different network, different day, n=5 vs n=75. What they are useful for is a sanity check: OpenRouter lands north of a second to first token in his run and in ours, from two different corners of the internet. Against his table, LLM Gateway's 906ms cold and 814ms warm sit at or below the best row — but the only comparison we will state as fact is the one we measured ourselves, interleaved, from one machine.&lt;/p&gt;

&lt;p&gt;Location dependence cuts both ways, and the benchmark's README says so explicitly: results are a property of where you measure from, not a global ranking. Which is why the right move is to run it yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run the benchmark yourself
&lt;/h2&gt;

&lt;p&gt;The whole thing is a config file and two API keys:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/rbadillap/ai-gateways-benchmark
&lt;span class="nb"&gt;cd &lt;/span&gt;ai-gateways-benchmark
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"runs_cold"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"runs_warm"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Reply with the single word: pong"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"max_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"gateways"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"llmgateway"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"host"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"api.llmgateway.io"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/v1/chat/completions"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"anthropic/claude-haiku-4-5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"auth_value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bearer $LLM_GATEWAY_API_KEY"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openrouter"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"host"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openrouter.ai"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/api/v1/chat/completions"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"anthropic/claude-haiku-4.5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"auth_value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bearer $OPENROUTER_API_KEY"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;LLM_GATEWAY_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;... &lt;span class="nv"&gt;OPENROUTER_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;... python3 bench.py config.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It prints per-run lines while it works, then a medians table, and dumps raw per-run JSON with request-id receipts. If you run it from your region and get different numbers — including ones where we lose — we want to see them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Latency is the tax you pay on every request
&lt;/h2&gt;

&lt;p&gt;A gateway earns its hop with failover, unified billing, and one API across &lt;a href="https://llmgateway.io/models" rel="noopener noreferrer"&gt;every model it routes&lt;/a&gt;. But you pay its latency on every single request, forever. That makes time to first token one of the few gateway properties worth measuring before you commit — and one of the easiest, since the tooling is open source and takes minutes to run.&lt;/p&gt;

&lt;p&gt;If you are on OpenRouter today, LLM Gateway speaks the same OpenAI-compatible API — switching means changing the base URL and swapping in an LLM Gateway API key, covered in the &lt;a href="https://docs.llmgateway.io/migrations/openrouter" rel="noopener noreferrer"&gt;OpenRouter migration guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is TTFT and why does it matter more than TTFB?
&lt;/h3&gt;

&lt;p&gt;TTFT (time to first token) is the delay between sending a request and receiving the first piece of model output in the stream. TTFB (time to first byte) only measures when the server starts responding — a gateway can stream headers immediately while the model is still silent. For anything a user watches in real time, TTFT is the latency they actually experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a good TTFT for an AI gateway?
&lt;/h3&gt;

&lt;p&gt;It depends on the model and your distance from the gateway's edge, so compare gateways against each other rather than an absolute bar. In this AI gateway performance benchmark, first tokens from claude-haiku-4.5 arrived in roughly 800–900ms through LLM Gateway and 1200–1400ms through OpenRouter, measured from the same machine in the same session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are these results valid from every location?
&lt;/h3&gt;

&lt;p&gt;No — latency benchmarks are a property of the vantage point, and the benchmark's own README is explicit about it. Our numbers come from one residential connection on one day; the author's Vercel numbers come from another. The script is open source and takes minutes to run, so measure from where your servers actually live.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does LLM Gateway support the same models as OpenRouter?
&lt;/h3&gt;

&lt;p&gt;LLM Gateway routes an overlapping catalogue — the full list is on the &lt;a href="https://llmgateway.io/models" rel="noopener noreferrer"&gt;models page&lt;/a&gt;, spanning the major closed and open-weight providers on the &lt;a href="https://llmgateway.io/providers" rel="noopener noreferrer"&gt;providers page&lt;/a&gt;. Requests use the OpenAI-compatible format either way, so moving a workload between the two is a base URL and key change.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Measure it yourself:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://llmgateway.io/signup" rel="noopener noreferrer"&gt;Try LLM Gateway free&lt;/a&gt;&lt;/strong&gt; — one key, streaming from day one&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.llmgateway.io/migrations/openrouter" rel="noopener noreferrer"&gt;Migrate from OpenRouter&lt;/a&gt;&lt;/strong&gt; — a base URL and API key change&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://llmgateway.io/blog/what-is-an-llm-gateway" rel="noopener noreferrer"&gt;What is an LLM gateway?&lt;/a&gt;&lt;/strong&gt; — where the hop pays for itself&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>performance</category>
      <category>benchmark</category>
      <category>llm</category>
    </item>
    <item>
      <title>9 Best Open-Source LLMs in 2026 (Compared)</title>
      <dc:creator>smakosh</dc:creator>
      <pubDate>Tue, 21 Jul 2026 15:49:11 +0000</pubDate>
      <link>https://dev.to/smakosh/9-best-open-source-llms-in-2026-compared-29p2</link>
      <guid>https://dev.to/smakosh/9-best-open-source-llms-in-2026-compared-29p2</guid>
      <description>&lt;p&gt;Open-source LLMs stopped being the budget option in 2026. Kimi K3 sits level with Claude Opus 4.8 on the Artificial Analysis Intelligence Index (its hosted API is live; the weights themselves are expected by July 27), GLM-5.2 held the top open-model spot before it, and the field behind them is deep enough that the hard part is choosing.&lt;/p&gt;

&lt;p&gt;This ranking covers the nine best open-weight models right now — on license, context window, hardware reality, and the per-token price you actually pay. Every one of them is available through &lt;strong&gt;LLM Gateway&lt;/strong&gt; with one key, at each provider's published rate, so you can A/B any two of them by changing one word in a request.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Kimi K3 — the open frontier
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Moonshot AI · 2.8T params · 1M context · $3.00 / $15.00 per M&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The largest open-weight model ever announced — with one caveat: the weights are not downloadable yet. Moonshot expects to release them by July 27, 2026, and the license is still unannounced; the hosted API has been live since July 16. Ranks 4th of 189 models on the Artificial Analysis Intelligence Index — tied with Claude Opus 4.8 and GPT-5.5 — and took first place in Arena's blind Frontend Code testing. Always-on reasoning, vision, tools, and output configurable up to 1M tokens. The open model to beat, priced accordingly. &lt;a href="https://llmgateway.io/blog/kimi-k3" rel="noopener noreferrer"&gt;Full breakdown here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; teams that want closed-frontier quality with open-weight freedom.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. GLM-5.2 — the value flagship
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Z.ai · 744B params · 1M context · $1.40 / $4.40 per M&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MIT-licensed, weights on Hugging Face, and the top-ranked open model until K3 arrived. A real 1M-token context, strong agentic-coding results, and built-in web search support — with output at under a third of K3's rate and input at about half. Also the largest model on this list that fits a single 8-GPU node (or one 512 GB Mac Studio) at INT4.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; the best capability-per-dollar in the open field.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. DeepSeek V4 Pro — frontier scale at commodity prices
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DeepSeek · 1.6T params (49B active) · 1M context · $0.435 / $0.87 per M&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MIT-licensed MoE with an aggressive sparse design: 1.6T total parameters, 49B active. The result is a 1M-context frontier-class model priced under a dollar per million output tokens — an order of magnitude below K3. Reasoning, tools, JSON output; no vision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; high-volume production workloads where unit cost decides.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Kimi K2.6 — last generation's champion, now cheap
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Moonshot AI · 262K context · $0.95 / $4.00 per M&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before K3, Kimi K2.6 topped the open-weight rankings on the Artificial Analysis Intelligence Index. It is still a heavyweight — vision included — and its price dropped into value territory the day its successor shipped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; near-frontier quality with a smaller bill and a proven track record.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. MiniMax M3 — the multimodal one
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MiniMax · 512K context · $0.60 / $2.40 per M&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open weights, native multimodal understanding (text and images in one model), and MiniMax's sparse-attention design for efficient long-context inference. Posted 59.0% on SWE-Bench Pro at launch — above GPT-5.5 and Gemini 3.1 Pro on that benchmark.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; agents that need to read screenshots, diagrams, and UI alongside code.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Nemotron 3 Ultra 550B — the enterprise workhorse
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;NVIDIA · 550B params (55B active) · 262K context · $0.50 / $2.50 per M&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NVIDIA's open-weight flagship, tuned hard for agentic and enterprise workloads, with vision support and weights on Hugging Face. Backed by the deepest deployment tooling in the industry if you ever take it on-prem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; enterprises standardizing on NVIDIA's stack end to end.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Qwen3.6-35B-A3B — the local hero
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Alibaba · 35B params (3B active) · 262K context · $0.25 / $1.49 per M&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Apache 2.0, multimodal, and genuinely runnable on a 24 GB consumer GPU — 3B active parameters make it fast on modest hardware while it punches far above its size on agentic coding. The model to reach for when "open source" means "runs on my machine."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; local development, edge deployment, and hobbyist hardware.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. gpt-oss-120b — OpenAI's open one
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;OpenAI · 120B params · 131K context · $0.15 / $0.75 per M&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Apache 2.0 and sized to fit a single 80 GB GPU. Not the newest entry on this list, but the combination of pedigree, permissive license, single-GPU deployment, and rock-bottom hosted pricing keeps it in the rotation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; cheap reasoning at scale and single-GPU self-hosting.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Llama 4 Maverick — the ecosystem incumbent
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Meta · 1M context · $0.27 / $0.85 per M&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Meta's open-weight line no longer leads benchmarks, but no model family matches its ecosystem: fine-tunes, guardrails, tooling, and institutional familiarity. Vision support and a 1M context at bargain pricing keep it a safe default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; teams already invested in the Llama toolchain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison table
&lt;/h2&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;Model&lt;/th&gt;
&lt;th&gt;Lab&lt;/th&gt;
&lt;th&gt;License&lt;/th&gt;
&lt;th&gt;Context&lt;/th&gt;
&lt;th&gt;Input $/M&lt;/th&gt;
&lt;th&gt;Output $/M&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;Moonshot&lt;/td&gt;
&lt;td&gt;open weights*&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;GLM-5.2&lt;/td&gt;
&lt;td&gt;Z.ai&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;td&gt;$1.40&lt;/td&gt;
&lt;td&gt;$4.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;DeepSeek V4 Pro&lt;/td&gt;
&lt;td&gt;DeepSeek&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;td&gt;$0.435&lt;/td&gt;
&lt;td&gt;$0.87&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Kimi K2.6&lt;/td&gt;
&lt;td&gt;Moonshot&lt;/td&gt;
&lt;td&gt;open weights&lt;/td&gt;
&lt;td&gt;262K&lt;/td&gt;
&lt;td&gt;$0.95&lt;/td&gt;
&lt;td&gt;$4.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;MiniMax M3&lt;/td&gt;
&lt;td&gt;MiniMax&lt;/td&gt;
&lt;td&gt;open weights&lt;/td&gt;
&lt;td&gt;512K&lt;/td&gt;
&lt;td&gt;$0.60&lt;/td&gt;
&lt;td&gt;$2.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Nemotron 3 Ultra&lt;/td&gt;
&lt;td&gt;NVIDIA&lt;/td&gt;
&lt;td&gt;open weights&lt;/td&gt;
&lt;td&gt;262K&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Qwen3.6-35B-A3B&lt;/td&gt;
&lt;td&gt;Alibaba&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;td&gt;262K&lt;/td&gt;
&lt;td&gt;$0.25&lt;/td&gt;
&lt;td&gt;$1.49&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;gpt-oss-120b&lt;/td&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;td&gt;131K&lt;/td&gt;
&lt;td&gt;$0.15&lt;/td&gt;
&lt;td&gt;$0.75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Llama 4 Maverick&lt;/td&gt;
&lt;td&gt;Meta&lt;/td&gt;
&lt;td&gt;Llama license&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;td&gt;$0.27&lt;/td&gt;
&lt;td&gt;$0.85&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;*Weights publish by July 27, 2026; Moonshot has not yet announced the license. Prices are each provider's published rate through LLM Gateway; the live list is on the &lt;a href="https://llmgateway.io/models" rel="noopener noreferrer"&gt;models page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Maximum capability:&lt;/strong&gt; Kimi K3, with GLM-5.2 as the value alternative&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production volume:&lt;/strong&gt; DeepSeek V4 Pro or gpt-oss-120b — pennies per million&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multimodal agents:&lt;/strong&gt; MiniMax M3, or Qwen3.6-35B-A3B at the small end&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosting:&lt;/strong&gt; match the model to your hardware — Qwen3.6-35B-A3B for a workstation, gpt-oss-120b for a single 80 GB GPU, GLM-5.2 for a full node&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coding agents:&lt;/strong&gt; K3 for the hard problems, GLM-5.2 or DeepSeek V4 Pro for the loop — &lt;a href="https://llmgateway.io/blog/kimi-k3-claude-code" rel="noopener noreferrer"&gt;setup guide&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  One API for all nine
&lt;/h2&gt;

&lt;p&gt;Every model in this list is a &lt;code&gt;model&lt;/code&gt; string on the same endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.llmgateway.io/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$LLM_GATEWAY_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "glm-5.2",
    "messages": [{"role": "user", "content": "Review this diff for race conditions."}]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two ways to pay. &lt;strong&gt;Pay-as-you-go&lt;/strong&gt;: top up from $10, pay the published per-token rates plus a 5% platform fee at top-up — right for shipping products. &lt;strong&gt;&lt;a href="https://devpass.llmgateway.io" rel="noopener noreferrer"&gt;DevPass&lt;/a&gt;&lt;/strong&gt;: flat $29/$79/$179 a month for coding agents, with roughly 3× your subscription price in model usage at provider rates. On DevPass, every model on this list except Kimi K3 is standard-tier with no weekly cap; K3 crosses the premium price threshold and draws from a weekly premium allowance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is the best open-source LLM in 2026?
&lt;/h3&gt;

&lt;p&gt;Kimi K3, by benchmark standing: 4th of 189 models on the Artificial Analysis Intelligence Index, level with Claude Opus 4.8 — though its weights are expected by July 27 and it is API-only until then. If price matters, GLM-5.2 delivers most of that capability with output at under a third of K3's price.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the best small open-source LLM?
&lt;/h3&gt;

&lt;p&gt;Qwen3.6-35B-A3B — Apache 2.0, multimodal, 3B active parameters, and it runs on a 24 GB consumer GPU while holding its own on agentic coding benchmarks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are these models open source or open weight?
&lt;/h3&gt;

&lt;p&gt;Open weight: the trained weights are downloadable and self-hostable under permissive licenses (mostly MIT or Apache 2.0), but training data and code are generally not released. GLM-5.2, DeepSeek V4 Pro, Qwen3.6-35B-A3B, and gpt-oss-120b use standard OSI licenses; Llama uses Meta's community license. Kimi K3 is the exception for now: its weights are expected by July 27, 2026 and are unlicensed until Moonshot announces terms — today it is usable only through hosted APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the cheapest way to use open-source LLMs?
&lt;/h3&gt;

&lt;p&gt;Through a gateway at provider list prices. LLM Gateway adds no per-token markup — pay-as-you-go credits carry a 5% platform fee at top-up, and DevPass turns heavy coding-agent usage into a flat monthly rate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://llmgateway.io/signup" rel="noopener noreferrer"&gt;Try LLM Gateway free&lt;/a&gt;&lt;/strong&gt; — all nine models, one key&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://devpass.llmgateway.io" rel="noopener noreferrer"&gt;Get DevPass&lt;/a&gt;&lt;/strong&gt; — flat-rate open models in your coding agent from $29/mo&lt;/li&gt;
&lt;li&gt;Deep dive on the leader: &lt;a href="https://llmgateway.io/blog/kimi-k3" rel="noopener noreferrer"&gt;Kimi K3 and China's Open-Weight Model Wave&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://llmgateway.io/blog/best-open-source-llms" rel="noopener noreferrer"&gt;LLM Gateway blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>llm</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>How to Use Kimi K3 with Claude Code, Cursor, and Cline</title>
      <dc:creator>smakosh</dc:creator>
      <pubDate>Tue, 21 Jul 2026 15:48:36 +0000</pubDate>
      <link>https://dev.to/smakosh/how-to-use-kimi-k3-with-claude-code-cursor-and-cline-1dpi</link>
      <guid>https://dev.to/smakosh/how-to-use-kimi-k3-with-claude-code-cursor-and-cline-1dpi</guid>
      <description>&lt;p&gt;Kimi K3 took first place in Arena's Frontend Code evaluation the week it launched, and it holds a 1M-token context — but Moonshot doesn't ship a coding agent, and your coding agent doesn't ship Kimi K3. Claude Code is locked to Anthropic's API by default, Cursor to its own backend, Cline to whatever key you hand it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLM Gateway&lt;/strong&gt; bridges that gap. It speaks both the Anthropic and OpenAI API formats, so the tools you already use can run Kimi K3 — or any of &lt;a href="https://llmgateway.io/models" rel="noopener noreferrer"&gt;200+ models&lt;/a&gt; — with a base-URL change. Here is the exact setup for each tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kimi K3 in Claude Code
&lt;/h2&gt;

&lt;p&gt;Claude Code talks to any endpoint that speaks Anthropic's &lt;code&gt;/v1/messages&lt;/code&gt; format, which LLM Gateway does natively. Three environment variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://api.llmgateway.io
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_AUTH_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$LLM_GATEWAY_API_KEY&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;kimi-k3

claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the whole migration. Every request now routes through LLM Gateway to Kimi K3, and every request shows up in your dashboard with its exact cost, token counts, and cache-hit rate.&lt;/p&gt;

&lt;p&gt;One refinement worth adding: Claude Code uses a second, smaller model for routine background work, and you can point it at something cheap — or free:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_SMALL_FAST_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;glm-4.7-flash-free
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That puts K3 on the hard reasoning and a $0 model on the housekeeping.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kimi K3 in Cursor
&lt;/h2&gt;

&lt;p&gt;Cursor routes its &lt;strong&gt;chat / plan panel&lt;/strong&gt; (Cmd/Ctrl + L) through a custom OpenAI-compatible endpoint. Setup:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;Cursor Settings → Models&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Add your LLM Gateway key under &lt;strong&gt;OpenAI API Key&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;Override OpenAI Base URL&lt;/strong&gt; and set it to &lt;code&gt;https://api.llmgateway.io/v1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;kimi-k3&lt;/code&gt; as a custom model and select it&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Be aware of the boundary: Cursor's Composer, inline edit (Cmd/Ctrl + K), and autocomplete are locked to Cursor's own backend and will not route through any external endpoint. Plan and chat with K3's full 1M context in Cursor; if you want K3 driving the actual agent loop, use Claude Code or Cline instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kimi K3 in Cline
&lt;/h2&gt;

&lt;p&gt;Cline is the straightforward one — it's built to bring your own key:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the Cline panel in VS Code and click the settings gear&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;API Provider&lt;/strong&gt; to &lt;strong&gt;OpenAI Compatible&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Base URL&lt;/strong&gt;: &lt;code&gt;https://api.llmgateway.io/v1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Key&lt;/strong&gt;: your LLM Gateway key&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model ID&lt;/strong&gt;: &lt;code&gt;kimi-k3&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cline's full agent loop — file edits, terminal commands, project scaffolding — now runs on K3. If you want a specific upstream, use &lt;code&gt;moonshot/kimi-k3&lt;/code&gt;; otherwise the gateway picks a healthy provider and fails over automatically.&lt;/p&gt;

&lt;p&gt;Also worth knowing: &lt;a href="https://llmgateway.io/blog/opencode-built-in-provider" rel="noopener noreferrer"&gt;OpenCode ships LLM Gateway as a built-in provider&lt;/a&gt;, so there K3 is a login and a model pick, no URLs at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Kimi K3 costs in your coding agent
&lt;/h2&gt;

&lt;p&gt;Agent loops are token-hungry, which is exactly the case &lt;a href="https://devpass.llmgateway.io" rel="noopener noreferrer"&gt;DevPass&lt;/a&gt; was built for — a flat monthly rate instead of a per-token bill:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Model usage included&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lite&lt;/td&gt;
&lt;td&gt;$29/mo&lt;/td&gt;
&lt;td&gt;~$87 at provider rates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$79/mo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$237&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td&gt;$179/mo&lt;/td&gt;
&lt;td&gt;~$537&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Kimi K3 is a &lt;strong&gt;premium-tier model&lt;/strong&gt; on DevPass (it crosses the $15-per-million-output threshold), so it draws from a weekly premium allowance — roughly $10 per week on Lite, $36 on Pro, $97 on Max. The practical pattern: K3 for planning and the gnarly bugs, a standard-tier model like GLM-5.2 or DeepSeek V4 Pro for the bulk of the loop — both uncapped within your monthly allowance. Pro and Max include one and two Reset Passes per cycle if you burn the premium allowance early.&lt;/p&gt;

&lt;p&gt;Prefer straight metering? Pay-as-you-go credits work with the identical setup: top up from $10, pay Moonshot's published rates ($3.00/M input, $0.30/M cached, $15.00/M output) plus a 5% platform fee at top-up. K3's cached-input pricing matters here — agent loops re-send the same context every step, and cache hits bill at a tenth of the fresh rate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does Claude Code work with non-Anthropic models like Kimi K3?
&lt;/h3&gt;

&lt;p&gt;Yes. Claude Code sends Anthropic-format requests to whatever &lt;code&gt;ANTHROPIC_BASE_URL&lt;/code&gt; points at. LLM Gateway accepts that format and translates to each provider behind the scenes, so &lt;code&gt;ANTHROPIC_MODEL=kimi-k3&lt;/code&gt; just works — as does any other model in the catalog.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can Cursor's Composer or autocomplete use Kimi K3?
&lt;/h3&gt;

&lt;p&gt;No. Cursor only honors a custom endpoint for the chat / plan panel; Composer, inline edit, and autocomplete stay on Cursor's backend regardless of your settings. For a full agent loop on K3, use Claude Code, Cline, or OpenCode.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Kimi K3 included in DevPass?
&lt;/h3&gt;

&lt;p&gt;Yes, on every tier, as a premium-tier model with a weekly allowance on top of your monthly credit pool. Standard-tier models — including GLM-5.2 and DeepSeek V4 Pro — have no weekly cap.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which coding tool is best for Kimi K3?
&lt;/h3&gt;

&lt;p&gt;The ones that route their full agent loop through your endpoint: Claude Code, Cline, or OpenCode. Cursor is fine for K3-powered planning but keeps its agent features on its own models.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://devpass.llmgateway.io" rel="noopener noreferrer"&gt;Get DevPass&lt;/a&gt;&lt;/strong&gt; — flat-rate Kimi K3 in your coding agent from $29/mo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://llmgateway.io/signup" rel="noopener noreferrer"&gt;Try LLM Gateway free&lt;/a&gt;&lt;/strong&gt; — one key for K3 and 200+ models&lt;/li&gt;
&lt;li&gt;New to K3? Start with &lt;a href="https://llmgateway.io/blog/kimi-k3" rel="noopener noreferrer"&gt;Kimi K3 and China's Open-Weight Model Wave&lt;/a&gt;, or see how it stacks up in &lt;a href="https://llmgateway.io/blog/kimi-k3-vs-claude-opus" rel="noopener noreferrer"&gt;Kimi K3 vs Claude Opus 4.8&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://llmgateway.io/blog/kimi-k3-claude-code" rel="noopener noreferrer"&gt;LLM Gateway blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Kimi K3 vs Claude Opus 4.8: Benchmarks, Price, Verdict</title>
      <dc:creator>smakosh</dc:creator>
      <pubDate>Tue, 21 Jul 2026 15:48:00 +0000</pubDate>
      <link>https://dev.to/smakosh/kimi-k3-vs-claude-opus-48-benchmarks-price-verdict-236o</link>
      <guid>https://dev.to/smakosh/kimi-k3-vs-claude-opus-48-benchmarks-price-verdict-236o</guid>
      <description>&lt;p&gt;Kimi K3 is the first open-weight model that makes the Kimi K3 vs Claude Opus 4.8 question worth asking seriously. On the Artificial Analysis Intelligence Index, K3 ranks fourth of 189 models — level with Opus 4.8 and GPT-5.5, behind only Claude Fable 5 and GPT-5.6 Sol. It also costs 40% less per token, and its weights are expected to be released by July 27.&lt;/p&gt;

&lt;p&gt;The honest answer is not "K3 wins" or "Opus wins" — it depends on what you're optimizing for. Here are the numbers, then the verdict.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmarks: Kimi K3 vs Claude Opus 4.8
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Kimi K3&lt;/th&gt;
&lt;th&gt;Claude Opus 4.8&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Artificial Analysis Intelligence Index&lt;/td&gt;
&lt;td&gt;57 (4th/189)&lt;/td&gt;
&lt;td&gt;statistical tie&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPQA Diamond&lt;/td&gt;
&lt;td&gt;93.5%&lt;/td&gt;
&lt;td&gt;93.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-Bench 2.1&lt;/td&gt;
&lt;td&gt;88.3%*&lt;/td&gt;
&lt;td&gt;74.6%*&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SWE-bench Verified&lt;/td&gt;
&lt;td&gt;not published&lt;/td&gt;
&lt;td&gt;88.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arena Frontend Code&lt;/td&gt;
&lt;td&gt;1st (1,679)&lt;/td&gt;
&lt;td&gt;ranked below&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;*Reported on different harnesses (Opus 4.8's score uses the Terminus-2 harness), so treat the Terminal-Bench gap as directional, not exact.&lt;/p&gt;

&lt;p&gt;Three takeaways. On graduate-level reasoning (GPQA Diamond) the models are statistically tied. On agentic terminal work, K3's published number is well ahead, with the harness caveat above. And in Arena's blind Frontend Code testing, developers ranked K3 first outright — ahead of every model, including Anthropic's.&lt;/p&gt;

&lt;p&gt;Where Opus 4.8 keeps an edge: SWE-bench Verified at 88.6% is a published, battle-tested result K3 has no counterpart for yet, and Anthropic's models remain the default target for agent harnesses — Claude Code, MCP tooling, and most agentic scaffolds are tuned against Claude first. K3 is three days old; its ecosystem is not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing: 40% cheaper across the board
&lt;/h2&gt;

&lt;p&gt;Per-token rates through LLM Gateway (each provider's published pricing):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Per million tokens&lt;/th&gt;
&lt;th&gt;Kimi K3&lt;/th&gt;
&lt;th&gt;Claude Opus 4.8&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Input&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cached input&lt;/td&gt;
&lt;td&gt;$0.30&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;td&gt;$25.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Both have a 1M-token context window. K3's output limit defaults to 131K tokens but is configurable up to the full 1M in a single response; Opus 4.8 caps output at 128K.&lt;/p&gt;

&lt;p&gt;Concrete math: a coding-agent workload of 100M input and 20M output tokens a month runs $600 on Kimi K3 and $1,000 on Claude Opus 4.8. Same ratio at any scale — K3 is 40% cheaper on input, cached input, and output alike.&lt;/p&gt;

&lt;p&gt;One operational difference: K3's reasoning is always on at full effort — &lt;code&gt;reasoning_effort&lt;/code&gt; currently accepts only &lt;code&gt;max&lt;/code&gt;, with lower-effort modes promised in later updates. That is part of why its benchmark numbers are strong, but it means K3 spends thinking tokens even on trivial requests. Opus 4.8 lets you dial reasoning effort up and down per request today — cheaper and faster on the easy 80%.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each one is for
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pick Kimi K3 when&lt;/strong&gt; cost dominates, you want frontend-heavy code generation (the Arena result is real), you need single-shot outputs longer than 128K tokens, or open weights matter — self-hosting, fine-tuning, or simply not depending on one vendor's API terms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick Claude Opus 4.8 when&lt;/strong&gt; you're running mature agent harnesses tuned for Claude, you want configurable reasoning effort, or you need the SWE-bench-class repo-editing reliability that teams have already validated in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Or don't pick.&lt;/strong&gt; The switch between them is a one-word change to the request body, which makes the real answer an A/B test on your own workload:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.llmgateway.io/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$LLM_GATEWAY_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "kimi-k3",
    "messages": [{"role": "user", "content": "Implement the retry logic described in RFC-42.md"}]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run a week on &lt;code&gt;kimi-k3&lt;/code&gt;, a week on &lt;code&gt;claude-opus-4-8&lt;/code&gt;, and read the answer off your LLM Gateway dashboard — per-model cost, latency, and token counts side by side.&lt;/p&gt;

&lt;h2&gt;
  
  
  Flat rate or pay-as-you-go
&lt;/h2&gt;

&lt;p&gt;Both models count as &lt;strong&gt;premium-tier&lt;/strong&gt; on &lt;a href="https://devpass.llmgateway.io" rel="noopener noreferrer"&gt;DevPass&lt;/a&gt; ($29/$79/$179 per month), drawing from the weekly premium allowance — so a flat-rate plan covers the A/B test without a separate Anthropic subscription. On pay-as-you-go credits you pay the per-token rates above plus a 5% platform fee at top-up, from $10.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Kimi K3 as good as Claude Opus 4.8?
&lt;/h3&gt;

&lt;p&gt;On aggregate intelligence benchmarks, yes — Artificial Analysis ranks them level, and they are statistically tied on GPQA Diamond. On production coding-agent work, Opus 4.8 still has the deeper published record (88.6% SWE-bench Verified) and the more mature harness ecosystem. On frontend code generation, blind developer testing ranked K3 first.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much cheaper is Kimi K3 than Claude Opus 4.8?
&lt;/h3&gt;

&lt;p&gt;40% on every token class: $3.00 vs $5.00 per million input, $0.30 vs $0.50 cached, $15.00 vs $25.00 output.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I switch between Kimi K3 and Claude Opus 4.8 without code changes?
&lt;/h3&gt;

&lt;p&gt;Yes. Through LLM Gateway both are the same OpenAI-compatible endpoint — swap the &lt;code&gt;model&lt;/code&gt; field between &lt;code&gt;kimi-k3&lt;/code&gt; and &lt;code&gt;claude-opus-4-8&lt;/code&gt; and nothing else changes. Costs for both land in one dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Kimi K3 open source?
&lt;/h3&gt;

&lt;p&gt;Not yet. Kimi K3's weights are expected by July 27, 2026 and the license has not been announced; until then it is API-only, like Opus 4.8 — the difference is that Opus stays closed. See &lt;a href="https://llmgateway.io/blog/kimi-k3" rel="noopener noreferrer"&gt;our Kimi K3 overview&lt;/a&gt; for the full release details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://llmgateway.io/signup" rel="noopener noreferrer"&gt;Try LLM Gateway free&lt;/a&gt;&lt;/strong&gt; — A/B Kimi K3 against Claude Opus 4.8 with one key&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://devpass.llmgateway.io" rel="noopener noreferrer"&gt;Get DevPass&lt;/a&gt;&lt;/strong&gt; — both models on one flat rate, from $29/mo&lt;/li&gt;
&lt;li&gt;Wire K3 into your editor with &lt;a href="https://llmgateway.io/blog/kimi-k3-claude-code" rel="noopener noreferrer"&gt;How to Use Kimi K3 with Claude Code, Cursor, and Cline&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://llmgateway.io/blog/kimi-k3-vs-claude-opus" rel="noopener noreferrer"&gt;LLM Gateway blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>claude</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Kimi K3 and China's Open-Weight Model Wave</title>
      <dc:creator>smakosh</dc:creator>
      <pubDate>Tue, 21 Jul 2026 15:47:24 +0000</pubDate>
      <link>https://dev.to/smakosh/kimi-k3-and-chinas-open-weight-model-wave-bpp</link>
      <guid>https://dev.to/smakosh/kimi-k3-and-chinas-open-weight-model-wave-bpp</guid>
      <description>&lt;p&gt;Moonshot AI released Kimi K3 on July 16, and the benchmarks put an open-weight model next to the best closed ones for the first time. The catch is access. K3 sits on Moonshot's platform, GLM-5.2 on Z.ai's, DeepSeek V4 Pro on DeepSeek's, MiniMax M3 on MiniMax's — four accounts, four billing relationships, four API dashboards, all before you have written a line of code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLM Gateway&lt;/strong&gt; routes every one of them through a single OpenAI-compatible endpoint. One key, one bill, and a switch between Kimi K3 and any of &lt;a href="https://llmgateway.io/models" rel="noopener noreferrer"&gt;200+ models&lt;/a&gt; is a one-word change to your request.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Kimi K3?
&lt;/h2&gt;

&lt;p&gt;Kimi K3 is Moonshot AI's flagship model for long-horizon coding and agentic work. At 2.8 trillion parameters — a mixture-of-experts design that activates 16 of its 896 experts per token — it is the largest open-weight model announced to date. Moonshot has committed to publishing the full weights by July 27, 2026.&lt;/p&gt;

&lt;p&gt;The specs that matter in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1M-token context window&lt;/strong&gt; (1,048,576 tokens), with output configurable up to the same 1M — enough to hold a large repository plus its docs in a single request&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Always-on reasoning&lt;/strong&gt; — K3 thinks before every answer; there is no non-thinking mode&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vision, tool calls, and JSON output&lt;/strong&gt; supported out of the box&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt caching&lt;/strong&gt; at a 90% discount on repeated input&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Early results back up the size. K3 ranks fourth of 189 models on the Artificial Analysis Intelligence Index — level with Claude Opus 4.8 and GPT-5.5 — and took first place in Arena's Frontend Code evaluation in blind developer testing. It posted 93.5% on GPQA Diamond and 88.3% on Terminal-Bench 2.1, the strongest open-weight results published on both at release.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kimi K3 pricing
&lt;/h2&gt;

&lt;p&gt;Through LLM Gateway you pay Moonshot's published per-token rates:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tokens&lt;/th&gt;
&lt;th&gt;Price per million&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Input&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cached input&lt;/td&gt;
&lt;td&gt;$0.30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The cached-input rate is the number to watch. Coding agents re-send the same system prompt, file context, and conversation history on every step, so in a long agent session most of your input tokens are cache hits billed at a tenth of the fresh rate.&lt;/p&gt;

&lt;h2&gt;
  
  
  The open-weight wave K3 leads
&lt;/h2&gt;

&lt;p&gt;K3 is the headline, but 2026 has produced a full roster of frontier-class open-weight models from Chinese labs — all MIT-licensed or close to it, all available through LLM Gateway at provider list prices:&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;Lab&lt;/th&gt;
&lt;th&gt;Released&lt;/th&gt;
&lt;th&gt;Context&lt;/th&gt;
&lt;th&gt;Input $/M&lt;/th&gt;
&lt;th&gt;Output $/M&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;Moonshot AI&lt;/td&gt;
&lt;td&gt;Jul 2026&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GLM-5.2&lt;/td&gt;
&lt;td&gt;Z.ai&lt;/td&gt;
&lt;td&gt;Jun 2026&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;td&gt;$1.40&lt;/td&gt;
&lt;td&gt;$4.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MiniMax M3&lt;/td&gt;
&lt;td&gt;MiniMax&lt;/td&gt;
&lt;td&gt;Jun 2026&lt;/td&gt;
&lt;td&gt;512K&lt;/td&gt;
&lt;td&gt;$0.60&lt;/td&gt;
&lt;td&gt;$2.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4 Pro&lt;/td&gt;
&lt;td&gt;DeepSeek&lt;/td&gt;
&lt;td&gt;Apr 2026&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;td&gt;$0.435&lt;/td&gt;
&lt;td&gt;$0.87&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each fills a different slot. GLM-5.2 (744B, MIT license) was the top-ranked open model before K3 arrived — its output costs under a third of K3's rate ($4.40 vs $15.00 per million) and its input about 47% ($1.40 vs $3.00). DeepSeek V4 Pro (1.6T total, 49B active, MIT license) delivers a 1M-token context at under a dollar per million output tokens. MiniMax M3 is the multimodal option, taking image input alongside text. And if you want a zero-cost entry point, &lt;code&gt;glm-4.7-flash-free&lt;/code&gt; runs through the same endpoint for $0.&lt;/p&gt;

&lt;h2&gt;
  
  
  One endpoint for all of them
&lt;/h2&gt;

&lt;p&gt;LLM Gateway speaks the OpenAI API, so anything that can call OpenAI can call Kimi K3:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.llmgateway.io/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$LLM_GATEWAY_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "kimi-k3",
    "messages": [{"role": "user", "content": "Refactor this module to remove the circular import."}]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Swapping to GLM-5.2 or DeepSeek V4 Pro is a change to the &lt;code&gt;model&lt;/code&gt; field — no new SDK, no new key. If you need a specific upstream, pin it with the provider prefix (&lt;code&gt;moonshot/kimi-k3&lt;/code&gt;); otherwise the gateway routes to a healthy provider and fails over automatically if one goes down. Kimi K3 is served by both Moonshot and Novita, so a single-provider outage does not take your app with it.&lt;/p&gt;

&lt;p&gt;Every request lands in the same dashboard: per-model cost, token counts, cache-hit rates, and latency, across all providers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run Kimi K3 on a flat rate with DevPass
&lt;/h2&gt;

&lt;p&gt;If K3 is headed for your coding agent, the cheapest way to run it hard is &lt;a href="https://devpass.llmgateway.io" rel="noopener noreferrer"&gt;DevPass&lt;/a&gt; — a flat monthly plan that works with Claude Code, OpenCode, Cline, Cursor (chat/plan mode only), and anything else OpenAI- or Anthropic-compatible:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Model usage included&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lite&lt;/td&gt;
&lt;td&gt;$29/mo&lt;/td&gt;
&lt;td&gt;~$87 at provider rates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$79/mo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$237&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td&gt;$179/mo&lt;/td&gt;
&lt;td&gt;~$537&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every dollar of allowance is metered at the provider rates above, so on Pro you get roughly $237 of model usage for $79 — and a runaway agent loop cannot produce a surprise invoice.&lt;/p&gt;

&lt;p&gt;One gating detail to know: at $15 per million output tokens, Kimi K3 counts as a &lt;strong&gt;premium-tier model&lt;/strong&gt; on DevPass, so it draws from a weekly premium allowance — roughly $10 per week of premium usage on Lite, $36 on Pro, and $97 on Max, on top of your monthly pool. GLM-5.2, MiniMax M3, and DeepSeek V4 Pro are all &lt;strong&gt;standard-tier&lt;/strong&gt;: no weekly cap, usable until your monthly allowance runs out. A workable pattern is K3 for the hardest tasks and GLM-5.2 or DeepSeek V4 Pro for the bulk of the loop. If you burn through the premium allowance mid-week, a Reset Pass restores it instantly — Pro includes one per cycle and Max includes two.&lt;/p&gt;

&lt;h2&gt;
  
  
  Or pay as you go
&lt;/h2&gt;

&lt;p&gt;For production apps, PAYG credits skip the subscription entirely. Top up from $10, pay each provider's published per-token price as you go, and LLM Gateway adds a flat 5% platform fee at top-up — the per-token rates themselves are pass-through. You keep the same single endpoint, automatic failover, prompt caching, and cost dashboard, metered to the token.&lt;/p&gt;

&lt;p&gt;The two models work together: DevPass for your own coding agents, PAYG for the product you ship.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Kimi K3 open source?
&lt;/h3&gt;

&lt;p&gt;Kimi K3 is an open-weight model. Moonshot AI announced it on July 16, 2026 and has committed to releasing the full 2.8T-parameter weights by July 27, 2026; the weights license has not been announced yet. The API is live now — self-hosting will be possible once the weights publish, though a 2.8T mixture-of-experts model demands serious hardware, which is why most teams will run it through an API.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much does Kimi K3 cost?
&lt;/h3&gt;

&lt;p&gt;Through LLM Gateway, Kimi K3 costs $3.00 per million input tokens, $0.30 per million cached input tokens, and $15.00 per million output tokens — Moonshot's published rates. On a DevPass plan it is included in the flat monthly price as a premium-tier model.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Kimi K3's context window?
&lt;/h3&gt;

&lt;p&gt;1,048,576 tokens — a full 1M-token context, with output defaulting to 131K tokens and configurable up to the same 1M. The same headline context as GLM-5.2 and DeepSeek V4 Pro.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use Kimi K3 with Claude Code or Cursor?
&lt;/h3&gt;

&lt;p&gt;Yes. LLM Gateway exposes OpenAI- and Anthropic-compatible endpoints, so point your tool's base URL at &lt;code&gt;https://api.llmgateway.io/v1&lt;/code&gt; with your key and select &lt;code&gt;kimi-k3&lt;/code&gt; as the model. In Claude Code and Cline the full agent loop routes through LLM Gateway; Cursor honors an external endpoint only in its chat/plan panel — Composer, inline edit, and autocomplete stay on Cursor's own backend. With DevPass this is covered by the flat monthly rate. Step-by-step setup for each tool: &lt;a href="https://llmgateway.io/blog/kimi-k3-claude-code" rel="noopener noreferrer"&gt;How to Use Kimi K3 with Claude Code, Cursor, and Cline&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://llmgateway.io/signup" rel="noopener noreferrer"&gt;Try LLM Gateway free&lt;/a&gt;&lt;/strong&gt; — one key for Kimi K3 and 200+ other models&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://devpass.llmgateway.io" rel="noopener noreferrer"&gt;Get DevPass&lt;/a&gt;&lt;/strong&gt; — flat-rate plans from $29/mo for coding agents&lt;/li&gt;
&lt;li&gt;Read the &lt;a href="https://docs.llmgateway.io" rel="noopener noreferrer"&gt;API docs&lt;/a&gt; or see how the plans compare in &lt;a href="https://llmgateway.io/blog/best-ai-coding-plans" rel="noopener noreferrer"&gt;10 Best AI Coding Plans in 2026&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Go deeper: &lt;a href="https://llmgateway.io/blog/kimi-k3-vs-claude-opus" rel="noopener noreferrer"&gt;Kimi K3 vs Claude Opus 4.8&lt;/a&gt; and the full &lt;a href="https://llmgateway.io/blog/best-open-source-llms" rel="noopener noreferrer"&gt;open-source LLM ranking&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://llmgateway.io/blog/kimi-k3" rel="noopener noreferrer"&gt;LLM Gateway blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>opensource</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>AI Gateway Fees Compared: Who Marks Up Your Tokens?</title>
      <dc:creator>smakosh</dc:creator>
      <pubDate>Wed, 08 Jul 2026 17:09:17 +0000</pubDate>
      <link>https://dev.to/smakosh/ai-gateway-fees-compared-who-marks-up-your-tokens-19</link>
      <guid>https://dev.to/smakosh/ai-gateway-fees-compared-who-marks-up-your-tokens-19</guid>
      <description>&lt;p&gt;Comparing AI gateways on price sounds simple until you read the fine print. The number on the pricing page is rarely the number on your invoice, because gateway fees hide in two separate places: a &lt;strong&gt;platform fee&lt;/strong&gt; on the credits you buy, and a &lt;strong&gt;markup&lt;/strong&gt; on the tokens you spend. Miss either one and your "cheap" gateway quietly costs more than the provider you were trying to save money on.&lt;/p&gt;

&lt;p&gt;This guide breaks down what the major AI gateways actually charge in 2026, using each vendor's published pricing. &lt;strong&gt;LLM Gateway&lt;/strong&gt; is one of them, so we're biased — but the table below is the real picture, including where others are cheaper for a given workload.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two fees, not one
&lt;/h2&gt;

&lt;p&gt;Every gateway makes money in one (or both) of two ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Token markup&lt;/strong&gt; — a percentage added on top of the provider's per-token rate. A 10% markup on a $5/1M-token model means you pay $5.50. This is the expensive one, because it scales with every token forever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform / credit fee&lt;/strong&gt; — a flat percentage taken when you load credits (often with a minimum), or a monthly/usage subscription. This is usually the smaller one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The healthiest pricing model is &lt;strong&gt;zero token markup&lt;/strong&gt; plus a transparent, predictable platform fee — and the option to drop even that by bringing your own provider keys.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each gateway charges
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Gateway&lt;/th&gt;
&lt;th&gt;Token markup&lt;/th&gt;
&lt;th&gt;Platform / subscription fee&lt;/th&gt;
&lt;th&gt;Bring your own keys&lt;/th&gt;
&lt;th&gt;Self-host&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LLM Gateway&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;5% on credits (0% with your own keys)&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Free (AGPLv3)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenRouter&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;5.5% on card credits ($0.80 min; 5% crypto)&lt;/td&gt;
&lt;td&gt;Free to 1M req/mo, then 5%&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vercel AI Gateway&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Pay-as-you-go credits + payment fees&lt;/td&gt;
&lt;td&gt;Free (paid tier)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare AI Gateway&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Free direct; +5% if you use Unified Billing&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Eden AI&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;5.5% on credits&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Portkey&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Free tier; Production $49/mo (+$9/100k logs)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LiteLLM&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Free (you pay infra); Enterprise from ~$250/mo&lt;/td&gt;
&lt;td&gt;Yes&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;The good news: in 2026, &lt;strong&gt;none of the major gateways mark up tokens&lt;/strong&gt; — they all pass provider rates through. The competition has moved to the platform fee, BYOK terms, and whether you can self-host to pay nothing at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  The costs that don't show up on the pricing page
&lt;/h2&gt;

&lt;p&gt;A few line items are easy to miss when you're comparing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Payment-processing fees.&lt;/strong&gt; Several gateways (Vercel, OpenRouter, Cloudflare's Unified Billing) pass through card-processing costs on top of, or as part of, the platform fee. On small top-ups these can dominate — OpenRouter's $0.80 minimum is 8% on a $10 purchase.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log-retention and seat tiers.&lt;/strong&gt; Observability-led gateways meter on logs or seats. Portkey's Production plan includes 100k logs/month, then bills $9 per additional 100k. Budget for the volume you'll actually generate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-host infrastructure.&lt;/strong&gt; "Free and open source" still costs the servers, Redis, and on-call time to run it. That's real money — it's just yours to control.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to pay the least
&lt;/h2&gt;

&lt;p&gt;Three levers, in order of impact:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Bring your own keys.&lt;/strong&gt; If you already have provider accounts or volume discounts, BYOK lets you pay the provider directly. With LLM Gateway that's a 0% platform fee; with OpenRouter it's free up to 1M requests a month, then 5%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-host.&lt;/strong&gt; If data residency or absolute cost control matters, run the gateway yourself. LLM Gateway is AGPLv3 and self-hostable end to end; LiteLLM is a self-hosted proxy. Both drop your platform fee to zero.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cache and route.&lt;/strong&gt; The cheapest token is the one you never send. Built-in response caching makes repeat requests free, and routing simple requests to budget models keeps your blended cost down. Run your real traffic through the &lt;a href="https://llmgateway.io/token-cost-calculator" rel="noopener noreferrer"&gt;Token Cost Calculator&lt;/a&gt; before you commit.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do AI gateways mark up your tokens?
&lt;/h3&gt;

&lt;p&gt;In 2026, the major ones don't. LLM Gateway, OpenRouter, Vercel AI Gateway, Cloudflare, Eden AI, Portkey, and LiteLLM all pass provider token rates through without a per-token markup. They make money on a platform/credit fee or a subscription instead — so compare those, not the token rates.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the cheapest AI gateway?
&lt;/h3&gt;

&lt;p&gt;For most teams, the cheapest path is bringing your own provider keys (0% fee on LLM Gateway) or self-hosting an open-source gateway (LLM Gateway or LiteLLM), which removes the platform fee entirely. On the managed tier, LLM Gateway's flat 5% credit fee is among the lowest, and lower than OpenRouter's 5.5%.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is a platform fee or a token markup worse?
&lt;/h3&gt;

&lt;p&gt;A token markup is worse. It scales with every token you ever send, so it compounds as you grow. A flat platform fee on credits is a one-time percentage when you load funds — predictable and far smaller over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pay provider rates, not gateway rates
&lt;/h2&gt;

&lt;p&gt;The whole point of a gateway is to save you money and effort, not add a tax. LLM Gateway passes provider token rates through with no markup, charges a flat 5% on credits (or 0% with your own keys), and is free to self-host if you'd rather pay nothing at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://llmgateway.io/signup" rel="noopener noreferrer"&gt;Try LLM Gateway free&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://llmgateway.io/token-cost-calculator" rel="noopener noreferrer"&gt;Run the Token Cost Calculator&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://llmgateway.io/blog/best-ai-gateways" rel="noopener noreferrer"&gt;See the 8 best AI gateways in 2026&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>api</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
