Product

Intelligent model routing with Auto

Shannon now defaults to Auto: each request is matched to the right model before work starts — Qwen3-Next for straightforward requests, Sonnet 4.6 for the hard ones — and the moment you pick a model yourself, your choice wins.

Shannon now picks the model for you. Auto is the new default: it matches each request to the right model before any work starts, and the moment you choose a model yourself, your choice wins.

Shannon is the AI workspace I’m building, and it runs on several models on purpose. That’s the Mixture of Models principle: each task should go to whichever one does it best today. Auto makes that routine, request by request, without you playing dispatcher.

The right model, unless you choose one

Auto sits at the top of the model picker, tagged Recommended, and it’s what you get if you never touch the menu. It routes between two models: straightforward requests go to Qwen3-Next, and work that needs the stronger reasoning goes to Sonnet 4.6. The decision is made once, before the first word of the answer, and it holds for the whole request; the model never changes mid-task.

Model picker dropdown with Auto selected and tagged Recommended, plus optional models including Gemini 3.5 Flash, Kimi K2 Thinking, Grok 4.3, and GLM-5.
Auto is the default and routes each request to the right model.

Your pick always wins

The menu didn’t go away, because models genuinely differ: Kimi K2 Thinking will grind through a task that takes two or three hundred steps in a row. You can pick Gemini 3.5 Flash, Kimi K2 Thinking, Grok 4.3, or GLM-5 for any request, and Plus members can also pick Sonnet 5 or Opus 4.8. The moment you choose, Auto stands down and your pick is honored.

The one exception is a pick that can’t do the job at all: choose a model that can’t see the image you attached, and Shannon moves the request to one that can. That’s the same no-loyalty idea running in the other direction.

When Auto is unsure, it uses the strong model

Auto doesn’t gamble. If a request is ambiguous, or the check that reads it doesn’t answer in time, the request goes straight to Sonnet 4.6. So when Auto is in doubt, the miss you can get is an easy question answered by the strongest model, never hard work handed to a lighter one.

Conversations keep their model

Follow-ups stay on the model that has been doing the work. That model already has the conversation warm (prompt caching keeps your context loaded, so its answers start faster), and switching engines mid-thread would throw that away. The stickiness works in one direction only: if the work grows harder over the course of a conversation, routing can ratchet up to a more capable model. It never bounces you around.

Every reply names the model that produced it, right on the message. If an answer isn’t landing, you know exactly what Auto picked and exactly what to switch to.

Under the hood

Routing runs once per request. Plain rules go first: does the request need to see images, and how much material is in play. Only genuinely ambiguous text goes to a second, smaller model that reads the request and suggests a tier under a hard time limit. That check runs while Shannon gathers the context for your request, so routing adds no wait you can feel. Any doubt or timeout falls back to Sonnet 4.6.

Auto picks between two models for now. The harder work is building the map of which model is best at which kind of task: running each one against the evaluation suite, working out what it costs at real usage, and verifying it calls tools the way the agent expects. An engine that fumbles a file edit breaks the run no matter how smart it is.

Capability gaps become tools when they can. Web search was, for a while, something only Gemini offered; rather than route every search-shaped request to one model, I made web search a tool that any model can call. A gap in one engine became a capability for all of them, and routing never has to trade away a feature.

Try it at shannon.bot, no sign-in needed. Ask for something and watch the model name land on the reply.

Found a mistake, or want to argue about an invariant? tuan@shannon.bot or send a PR on the blog repo.