Short answer: start every task on a fast, low-cost model and move up only when real examples show the cheaper one isn't good enough. For most teams in October 2026 that means Gemini 3.8 Flash or Claude Haiku 5.5 for summaries, classification and extraction; Claude Sonnet 5.5 or GPT-6.1 Sol for writing and everyday reasoning; Claude Opus 5.5 or GPT-6 Astra for the hardest problems; Perplexity Sonar when answers need live web sources; Nano Banana 2.1 for image edits, FLUX 3 for photorealism and Midjourney V7 for style; and Veo 3.1 Fast for video with sound. The cheat sheets below go task by task, with model ids for the LazySusan API and the reasoning behind each pick.
The one rule: start cheap, escalate on evidence
Model choice is the biggest lever on both quality and cost. For a typical request, the most expensive chat models cost around a hundred times the cheapest. Most tasks don't need the top of the range, and the ones that do are easy to spot once you test.
The process that works:
- Collect 30 to 50 real examples of the task, with what a good answer looks like.
- Run them on the cheap default and on one step up.
- Read the failures. If the cheap model fails on things that matter, step up. If both fail the same way, the problem is the prompt, not the model.
- Write the decision down next to the model id in config, so the next person knows why.
Treat these cheat sheets as starting points for step 2, not verdicts. Your data wins.
Chat and text: the cheat sheet
| Task | Start with | Step up to | Notes |
|---|---|---|---|
| Classification, tagging, routing | Claude Haiku 5.5 (anthropic/claude-haiku-5-5) | Gemini 3.8 Flash | Short outputs; cheap models do this well |
| Extraction to JSON | Gemini 3.8 Flash (google/gemini-3.8-flash) | GPT-6.1 Sol | Check JSON-mode support on each candidate |
| Summaries of tickets, calls, emails | Gemini 3.8 Flash | Claude Sonnet 5.5 | Step up when tone matters, not length |
| Very high volume, simple tasks | GPT-6 Luna (openai/gpt-6-luna) or Gemini 3.5 Flash-Lite | Claude Haiku 5.5 | Lowest cost per request |
| Customer-facing writing | Claude Sonnet 5.5 (anthropic/claude-sonnet-5-5) | Claude Opus 5.5 | Sonnet is a strong default for prose |
| General reasoning and analysis | GPT-6.1 Sol (openai/gpt-6.1-sol) | GPT-6 Astra | Leave room in max tokens for reasoning |
| Hardest reasoning, complex plans | Claude Opus 5.5 or GPT-6 Astra | Claude Fable 5.1 | Reserve for tasks that fail lower down |
| Long documents and big codebases | Gemini 3.1 Pro (google/gemini-3.1-pro) | Claude Opus 5.5 | Up to 1M tokens of context |
| Code generation and review | Claude Sonnet 5.5 | Claude Opus 5.5 or GPT-6.1 Sol | Grok Build (xai/grok-build-0.1) is tuned for code too |
| Answers that need current web sources | Sonar (perplexity/sonar) | Sonar Pro, Sonar Reasoning Pro | Returns citations; search adds a per-request fee |
| Low-cost reasoning | DeepSeek V4.1 Flash (deepseek/deepseek-flash) | DeepSeek V4 Pro | Text only, 128K context |
| Fast answers with a direct tone | Grok 4.3 (xai/grok-4.3) | Grok 4.7 | 1M-token context |
| Reading images: screenshots, receipts, photos | Gemini 3.8 Flash | GPT-6.1 Sol or Claude Sonnet 5.5 | DeepSeek and Perplexity models are text-only |
A few things that trip people up:
- Reasoning models spend tokens thinking. GPT-6, Gemini 3.x, Grok, DeepSeek V4 Pro and Sonar Reasoning Pro use part of your max tokens before answering. With a very small limit you can get an empty answer.
- Some settings are ignored. OpenAI's GPT-6 models ignore temperature, top_p and the penalties.
- Long context isn't free. A million-token window is useful, but you pay for every token you send, every time. Retrieve the relevant parts when you can.
Images: the cheat sheet
| Task | Start with | Model id | Why |
|---|---|---|---|
| Edit an existing photo | Nano Banana 2.1 | google/nano-banana-2.1 | Changes one thing, keeps the rest; up to 3 reference images |
| Final, high-detail assets | Nano Banana Pro | google/nano-banana-pro | Better fine detail and text than 2.1 |
| Long, precise prompts, text in images | GPT Image 2.5 | openai/gpt-image-2.5 | Follows detailed instructions; low, medium or high quality |
| Photorealistic product and lifestyle shots | FLUX 3 | bfl/flux-3 | Strong photorealism |
| High-resolution output | FLUX 1.1 Ultra | bfl/flux-pro-1.1-ultra | Up to 4MP |
| Stylised, art-directed images | Midjourney V7 | midjourney/v7 | Distinctive look |
| Anime and illustration | Niji 6 | midjourney/niji-6 | Illustration styles |
| Posters, logos, typography | Ideogram 3.0 | ideogram/ideogram-3 | Best-in-class text in images |
| Icons and scalable illustrations | Recraft V3 Vector | recraft/recraft-v3-vector | Outputs SVG |
| Open-model look, flexible styles | Stable Diffusion 3.5 Large | stability/sd-3.5-large | Classic open-model results |
| Cheap drafts and variations | Luma Photon Flash or Grok Imagine | luma/photon-flash-1, xai/grok-imagine-image | A few credits to a couple of dozen per image |
The image equivalent of "start cheap" is to draft on Photon Flash or Grok Imagine, pick the winners, and re-render them on the model you'd ship.
Video: the cheat sheet
| Task | Start with | Model id | Why |
|---|---|---|---|
| Short clip with dialogue or sound | Veo 3.1 Fast | google/veo-3.1-fast | Native audio at a fraction of full Veo's price |
| The final version of that clip | Veo 3.1 | google/veo-3.1 | Best quality in the Veo family |
| Testing prompts | Veo 3.1 Lite | google/veo-3.1-lite | Lowest-cost Veo, still with audio |
| Cinematic camera moves | Runway Gen-4.5 | runway/gen-4.5 | Strong motion and physics |
| Animate a still image cheaply | Runway Gen-4 Turbo | runway/gen-4-turbo | Needs a starting image |
| People, faces, body movement | Hailuo 2.3 | minimax/hailuo-2.3 | Good expressions; no audio |
| Square, ultrawide or portrait framing | Luma Ray 2 | luma/ray-2 | Six aspect ratios |
| Quick stylised social clips | Pika 2.5 | pika/pika-2.5 | Fast, playful |
| Lowest-cost image to video | Vidu Q2 Turbo | vidu/viduq2-turbo | Needs a starting image |
Only the Veo models generate audio. For the others, add a voiceover or music track separately. Sora isn't on the list because OpenAI shut it down; here's what replaced it.
Put the cheat sheet in code
A routing table is just a map from task to model id. Keep it in one file, read overrides from the environment, and tag every call with the task so the console shows cost per task:
import LazySusan from "lazysusan";
const ls = new LazySusan();
// task -> [default, step-up]
const ROUTES = {
classify: ["anthropic/claude-haiku-5-5", "google/gemini-3.8-flash"],
summarize: ["google/gemini-3.8-flash", "anthropic/claude-sonnet-5-5"],
write: ["anthropic/claude-sonnet-5-5", "anthropic/claude-opus-5-5"],
reason: ["openai/gpt-6.1-sol", "openai/gpt-6-astra"],
research: ["perplexity/sonar", "perplexity/sonar-pro"],
};
export async function run(task, messages, { escalate = false, maxTokens = 1000 } = {}) {
const [primary, stepUp] = ROUTES[task];
const model = escalate ? stepUp : primary;
return ls.chat.create({ model, messages, maxTokens, metadata: { task, model_tier: escalate ? "step-up" : "default" } });
}
// Escalate on a signal you trust: a failed validation, a low confidence score, a user retry
export async function summarizeChecked(text) {
const messages = [{ role: "user", content: `Summarise as JSON {"summary": string}:\n${text}` }];
const first = await run("summarize", messages, { maxTokens: 400 });
try {
return JSON.parse(first.text);
} catch {
const second = await run("summarize", messages, { escalate: true, maxTokens: 400 });
return JSON.parse(second.text);
}
}Two things make this work. First, every model in a category takes the same request, so a route is just a string; there's nothing else to change (more on that here). Second, the task and model_tier tags let you see how often each route escalates and what it costs. If a route escalates more than a third of the time, the step-up model should probably be the default.
Keep the expensive models for the jobs that earn them
Routing is also a cost control. Give each service's key an allowlist of the models in its routes, so a typo can't send production traffic to the most expensive model in the catalog, and set a monthly budget per key. Setting AI API budgets per developer, project and environment covers how.
Not writing code?
The same models are in the LazySusan app, where you can switch models mid-conversation or compare several side by side. The models page lists the current lineup and pricing has the app plans, which are separate from API credits. If you're choosing between assistants rather than routing between them, ChatGPT vs Claude vs Gemini is the friendlier read.
FAQ
Which AI model should I use for summarising text? Start with a fast, low-cost model such as Gemini 3.8 Flash or Claude Haiku 5.5. Step up to Claude Sonnet 5.5 if tone or nuance matters and the cheaper model falls short on your real examples.
What's the best model for coding? Claude Sonnet 5.5 is a strong default, with Claude Opus 5.5 and GPT-6.1 Sol for harder problems. Grok Build is tuned for code too. Test on your own codebase before committing.
Which model has the largest context window? The Claude, Gemini and Grok models in the LazySusan API accept up to 1 million tokens. GPT-6 models accept 400K, and DeepSeek and Perplexity models around 128K.
What is LLM routing? Sending each request to a model chosen for its task: a cheap model for simple work, a stronger one for hard work. With one API for every model, a route is just a model id in a lookup table.
Which AI video model generates sound? In the LazySusan API, the Google Veo 3.1 models (Veo 3.1, Veo 3.1 Fast and Veo 3.1 Lite) generate audio with the video. Other video models return silent clips.