<?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: Kernel</title>
    <description>The latest articles on DEV Community by Kernel (@kernel_dev).</description>
    <link>https://dev.to/kernel_dev</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%2F4172663%2Fc51cad43-0071-4769-a267-33f8b7cb8457.jpg</url>
      <title>DEV Community: Kernel</title>
      <link>https://dev.to/kernel_dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kernel_dev"/>
    <language>en</language>
    <item>
      <title>A model router for Claude Code, benchmarked: 82% cheaper, 2 tests lost</title>
      <dc:creator>Kernel</dc:creator>
      <pubDate>Sun, 11 Oct 2026 17:36:48 +0000</pubDate>
      <link>https://dev.to/kernel_dev/a-model-router-for-claude-code-benchmarked-82-cheaper-2-tests-lost-50m7</link>
      <guid>https://dev.to/kernel_dev/a-model-router-for-claude-code-benchmarked-82-cheaper-2-tests-lost-50m7</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.larebelion.com/2026/10/why-you-should-stop-using-one-model-for.html" rel="noopener noreferrer"&gt;larebelion.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most of us pick one model when a Claude Code session starts and let it do everything: plan a migration, write a test, summarise a file, touch up a README. Every one of those requests is billed at the price of that model, and on simple tasks the price rarely buys a better result.&lt;/p&gt;

&lt;p&gt;To put numbers on it, we built &lt;a href="https://gitlab.com/larebelion/rebel-router" rel="noopener noreferrer"&gt;Rebel Router&lt;/a&gt; (open source, MIT), a local proxy that picks a model per request, and ran it through a small benchmark of our own. This post covers how it works, how to set it up, and what it measured, including what it lost.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;Rebel Router runs on your machine (&lt;code&gt;127.0.0.1:8787&lt;/code&gt;) between your coding agent and the model providers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Code (Anthropic Messages) ─┐
                                  ├─► Rebel Router ─► Anthropic · OpenAI · xAI · Gemini · DeepSeek · Ollama
OpenCode (OpenAI Chat)  ──────────┘        │
                                           └─► SQLite ledger ─► dashboard · CSV · rebel spend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It has three parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Broker:&lt;/strong&gt; a catalogue of models with price, speed, context and a quality score per task class, which ranks the top 3 for each request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Router:&lt;/strong&gt; the classifier plus the proxy, translating between the Anthropic and OpenAI formats (streaming and tool calls included) when the chosen provider needs it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FinOps:&lt;/strong&gt; daily and per-project budgets, and a ledger of every request with its cost.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Providers: Anthropic, OpenAI, xAI (Grok), Google Gemini, DeepSeek and local Ollama models. Bring your own keys, or a single &lt;a href="https://opencode.ai/docs/zen" rel="noopener noreferrer"&gt;OpenCode Zen&lt;/a&gt; key that reaches GPT, Grok, DeepSeek, GLM, Qwen and Kimi through one endpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it decides
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Classify.&lt;/strong&gt; Every request lands in one of six classes (&lt;code&gt;orchestration&lt;/code&gt;, &lt;code&gt;complex_code&lt;/code&gt;, &lt;code&gt;bulk_code&lt;/code&gt;, &lt;code&gt;unit_tests&lt;/code&gt;, &lt;code&gt;qa_automation&lt;/code&gt;, &lt;code&gt;documentation&lt;/code&gt;) with a complexity score from 0 to 1.

&lt;ul&gt;
&lt;li&gt;With a &lt;code&gt;VENICE_API_KEY&lt;/code&gt;, it asks Venice's JEV decision model (in beta). Any error, odd answer or response slower than 800 ms falls back to the rules, and results are cached per instruction so an agent's tool loop doesn't ask again every turn.&lt;/li&gt;
&lt;li&gt;Without it, local rules look at keywords (English and Spanish), the tools used in recent turns (&lt;code&gt;Task&lt;/code&gt;, &lt;code&gt;TodoWrite&lt;/code&gt;, &lt;code&gt;Edit&lt;/code&gt;…), file types (&lt;code&gt;.spec.ts&lt;/code&gt;, &lt;code&gt;.md&lt;/code&gt;…), context size and Claude Code's request type. Compaction and auxiliary calls go to the cheapest documentation model.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rank.&lt;/strong&gt; The Broker drops models below a quality floor for the class (raised by complexity or an &lt;code&gt;opus&lt;/code&gt; request, lowered by &lt;code&gt;haiku&lt;/code&gt;), then weighs quality, price (input:output blended 3:1) and speed with per-class weights. The top 3 become the chosen model plus two fallbacks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget.&lt;/strong&gt; At 80 % of a budget it prefers cheaper models; at 100 % it downgrades to the cheapest acceptable model or answers HTTP 402 (&lt;code&gt;onLimit: block&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forward.&lt;/strong&gt; Claude-to-Claude requests pass through untouched apart from &lt;code&gt;model&lt;/code&gt; (headers such as &lt;code&gt;anthropic-beta&lt;/code&gt; and the SSE stream are relayed as-is). Everything else is translated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Record.&lt;/strong&gt; One ledger row per request: timestamp, project, class, provider, model, input/output/cache tokens, cost, latency, which classifier decided and why.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One thing to know: no Claude Code hook can change the session model. The UI keeps showing the model Claude Code asked for; the router's status line shows the one that actually answered.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://gitlab.com/larebelion/rebel-router.git &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;rebel-router
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nb"&gt;link&lt;/span&gt;                 &lt;span class="c"&gt;# puts `rebel` on your PATH&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env                    &lt;span class="c"&gt;# fill in the providers you use&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; ./.env&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;set&lt;/span&gt; +a&lt;span class="p"&gt;;&lt;/span&gt; rebel start   &lt;span class="c"&gt;# router on http://127.0.0.1:8787&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Providers without a key are skipped; Ollama models are used only if they're pulled locally.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Code
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rebel init claude &lt;span class="nt"&gt;--global&lt;/span&gt;     &lt;span class="c"&gt;# ~/.claude/settings.json: every project, CLI, claude -p, IDE extensions, Agent SDK&lt;/span&gt;
rebel init claude              &lt;span class="c"&gt;# or just this project (.claude/settings.local.json)&lt;/span&gt;
rebel init claude &lt;span class="nt"&gt;--uninstall&lt;/span&gt;  &lt;span class="c"&gt;# remove it again (add --global for the user-level install)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It backs up your settings and sets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ANTHROPIC_BASE_URL=http://127.0.0.1:8787&lt;/code&gt;, so the main session, subagents and background calls all go through the router;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ANTHROPIC_CUSTOM_HEADERS=x-rebel-project: &amp;lt;name&amp;gt;&lt;/code&gt; for per-project budgets and rules;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CLAUDE_CODE_GATEWAY_HINT_HEADERS=1&lt;/code&gt;, so the router can tell a &lt;code&gt;main&lt;/code&gt; call from a &lt;code&gt;subagent&lt;/code&gt; or &lt;code&gt;compaction&lt;/code&gt; one;&lt;/li&gt;
&lt;li&gt;optional hooks that tag the task, a status line with the routed model and today's spend, and the &lt;code&gt;/rebel-spend&lt;/code&gt; and &lt;code&gt;/rebel-top&lt;/code&gt; slash commands.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Claude desktop app is the exception: it takes its gateway from Developer → Configure Third-Party Inference, not from settings.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenCode
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rebel init opencode   &lt;span class="c"&gt;# writes opencode.json (provider "rebel") and a small plugin&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then select &lt;code&gt;rebel/auto&lt;/code&gt;, or pin a class with &lt;code&gt;rebel/auto:unit_tests&lt;/code&gt;, &lt;code&gt;rebel/auto:documentation&lt;/code&gt; and so on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pin a class from your prompt
&lt;/h3&gt;

&lt;p&gt;Write &lt;code&gt;#rebel:tests&lt;/code&gt;, &lt;code&gt;#rebel:docs&lt;/code&gt;, &lt;code&gt;#rebel:qa&lt;/code&gt;, &lt;code&gt;#rebel:bulk&lt;/code&gt;, &lt;code&gt;#rebel:complex&lt;/code&gt; or &lt;code&gt;#rebel:plan&lt;/code&gt; anywhere in a prompt. The router uses that class for the session until your next prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;rebel.yaml&lt;/code&gt; in the project or in &lt;code&gt;~/.rebel-router/&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;routing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;excludeProviders&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;xai&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;classModels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;documentation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;deepseek/deepseek-flash&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;aliases&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;opus&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;passthrough&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;haiku&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;hint&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;   &lt;span class="c1"&gt;# keep Opus requests on Opus; route Haiku freely&lt;/span&gt;
&lt;span class="na"&gt;budgets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;daily&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
  &lt;span class="na"&gt;projects&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;shop&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;3&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;onLimit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;downgrade&lt;/span&gt;
&lt;span class="na"&gt;projects&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;secret-client&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;localOnly&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;true&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;            &lt;span class="c1"&gt;# this project never leaves the machine&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Watching the spend
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rebel status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;router status, today's spend, budget state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rebel top --task tests&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;top 3 for a class, with reasons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rebel spend --today --by model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;spend by model, class, project or day (&lt;code&gt;--csv&lt;/code&gt;, &lt;code&gt;--json&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rebel export --days 30&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CSV of the ledger&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rebel dashboard&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;local dashboard on :8788&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rebel classify "&amp;lt;prompt&amp;gt;"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;see how a prompt would be classified&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The benchmark
&lt;/h2&gt;

&lt;p&gt;12 real tasks, two per class, each scored deterministically: hidden tests, mutation testing, deliberately buggy servers and rubrics. No model grades another. Run on 11 October 2026 with 10 models, one attempt per task, 1.78 USD in total. &lt;a href="https://gitlab.com/larebelion/rebel-router/-/blob/main/bench/README.md" rel="noopener noreferrer"&gt;Tasks&lt;/a&gt; and &lt;a href="https://gitlab.com/larebelion/rebel-router/-/raw/main/bench/results/latest.json" rel="noopener noreferrer"&gt;raw results&lt;/a&gt; are public.&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;Cost per task (USD)&lt;/th&gt;
&lt;th&gt;Pass rate&lt;/th&gt;
&lt;th&gt;Tasks run&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;gpt-6-luna&lt;/td&gt;
&lt;td&gt;0.0010&lt;/td&gt;
&lt;td&gt;92 %&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gemini-3.1-flash-lite&lt;/td&gt;
&lt;td&gt;0.0012&lt;/td&gt;
&lt;td&gt;67 %&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;claude-haiku-5-5&lt;/td&gt;
&lt;td&gt;0.0023&lt;/td&gt;
&lt;td&gt;75 %&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gemini-3.5-flash-lite&lt;/td&gt;
&lt;td&gt;0.0028&lt;/td&gt;
&lt;td&gt;83 %&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;deepseek-flash&lt;/td&gt;
&lt;td&gt;0.0051&lt;/td&gt;
&lt;td&gt;88 %&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;deepseek-v4-pro&lt;/td&gt;
&lt;td&gt;0.0097&lt;/td&gt;
&lt;td&gt;100 %&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;qwen3.8-max&lt;/td&gt;
&lt;td&gt;0.0137&lt;/td&gt;
&lt;td&gt;100 %&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;glm-5.3&lt;/td&gt;
&lt;td&gt;0.0198&lt;/td&gt;
&lt;td&gt;67 %&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;claude-sonnet-5-5&lt;/td&gt;
&lt;td&gt;0.0306&lt;/td&gt;
&lt;td&gt;83 %&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;claude-opus-5-5&lt;/td&gt;
&lt;td&gt;0.0799&lt;/td&gt;
&lt;td&gt;92 %&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Rows with fewer than 12 tasks are partial runs; don't read much into a 100 % on one or two tasks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Router vs. Opus for everything
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; 0.17 USD with the router choosing, against 0.96 USD with Opus 5.5 on every task: &lt;strong&gt;82 % less&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality:&lt;/strong&gt; 9 of 12 passed (75 %) against 11 of 12 (92 %). The three misses were two unit-test tasks and one QA task the router sent to Claude Haiku 5.5, whose answers ran past the 8,000-token limit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency:&lt;/strong&gt; mean time per task dropped from 31.7 s to 19.5 s.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Classifier:&lt;/strong&gt; the rule classifier (no JEV) put 9 of 12 tasks in the right class.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GPT-6 Luna passed the same 11 of 12 as Opus at roughly 1/80 of the cost on this set. That doesn't make it an Opus replacement; it says many everyday tasks don't need the most expensive model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;12 tasks, one attempt each. Per-class numbers are indicative, not a leaderboard.&lt;/li&gt;
&lt;li&gt;The savings cost two tasks Opus solved, both in testing and QA. Keep Opus wherever you ask for Opus (&lt;code&gt;aliases.opus: passthrough&lt;/code&gt;) or pin a model per class with &lt;code&gt;classModels&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Not covered: Grok, Gemini Pro, Ollama, and GPT models other than Luna. JEV was not measured; the benchmark used the rules.&lt;/li&gt;
&lt;li&gt;Anthropic doesn't support routing Claude Code to non-Claude models. It works, but Claude-only features are dropped in translation.&lt;/li&gt;
&lt;li&gt;JEV and Venice's Decisions API are in beta, so their request and response shape may change.&lt;/li&gt;
&lt;li&gt;Cost is list price: reported tokens times the official price in the catalogue.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  More
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Code, docs and the benchmark: &lt;a href="https://gitlab.com/larebelion/rebel-router" rel="noopener noreferrer"&gt;gitlab.com/larebelion/rebel-router&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.larebelion.com/2026/10/build-your-own-ai-model-router-with.html" rel="noopener noreferrer"&gt;Step-by-step lab&lt;/a&gt;: install, budgets, OpenCode, and checking which model answered and what it cost.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.larebelion.com/p/model-recommender.html" rel="noopener noreferrer"&gt;Model recommender&lt;/a&gt;: the same data, updated daily. Pick a task class and your limits, get the three models that fit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The number I'd watch is the 75 %. A router saving 82 % is only worth it if the tests it skips aren't the ones that would have warned you, so watch the ledger for the first few weeks before trusting it with your test suite.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
