Choosing a Model

Questions to Ask

QuestionIf yes
Is the task simple (tagging, extraction, yes/no)?Smallest fast model (Haiku 5.5, a small open model)
Needs multi-step reasoning, coding or tool use?Top tier (Opus 5.5)
High volume, normal chat or RAG?Mid tier (Sonnet 5.5)
Data must never leave your servers?Open model self-hosted, or a cloud region with the right agreement
Needs images or PDFs?A multimodal model (all current Claude models accept images and PDFs)
Indian languages?Test! Run the same 30 real prompts in each language on each candidate

A Simple Model Router

Example

Many apps route each request to a different model. Here is a rule-based router; production systems may use a cheap model to classify first:

def choose_model(task, needs_tools=False, long_reasoning=False):
    if needs_tools or long_reasoning:
        return "claude-opus-5-5"
    if task in {"classify", "extract", "route", "detect_language"}:
        return "claude-haiku-5-5"
    return "claude-sonnet-5-5"

requests = [
    ("classify", {}),
    ("answer_policy_question", {}),
    ("refund_with_order_lookup", {"needs_tools": True}),
    ("extract", {}),
    ("debug_checkout_code", {"long_reasoning": True}),
]
for task, opts in requests:
    print(f"{task:26} -> {choose_model(task, **opts)}")

Output

classify                   -> claude-haiku-5-5
answer_policy_question     -> claude-sonnet-5-5
refund_with_order_lookup   -> claude-opus-5-5
extract                    -> claude-haiku-5-5
debug_checkout_code        -> claude-opus-5-5