TechByteByByte

Model Selection Framework

Level 2 begins here: a repeatable decision framework for choosing between small and large models, reasoning models, open-source vs. proprietary, and hosted vs. self-hosted.

#AI Engineering#Model Selection#Level 2

Begin with the problem

The “smartest” model may be too slow, costly, private, or difficult to operate for a task. Model selection begins with the task and its quality bar, then measures the smallest option that meets it.

task + quality bar + constraints → candidate models → evaluation → routing decision

What you will learn

  • Compare models using task quality, latency, cost, privacy, and operational fit.
  • Distinguish hosted, self-hosted, reasoning, and smaller task-specific choices.
  • Build a measurement-based selection and routing strategy.

Current production grounding: OpenAI’s Evals documentation shows dataset- and grader-based evaluation for model applications.

Current production grounding: Google’s Gemini tools documentation distinguishes managed built-in tools from custom functions executed by the application.

These links document current public features and practices. They do not reveal a provider’s private implementation or guarantee that every product uses identical defaults.

1. The Engineering Problem

“Just use the best model” is bad engineering advice — the best model on a leaderboard is often the wrong choice for a specific production task, given its real cost and latency.

Model selection is a ongoing engineering decision, not a one-time choice you make and forget — and it’s the first concrete decision this course’s “model as external dependency” framing (Module 1) demands you make deliberately.


2. Why “Always Use the Biggest Model” Is Wrong

TASK: classify a support ticket into one of 5 categories

BIGGEST MODEL:      capable of this trivial task, but
                   costs 40x more and takes 10x longer than
                   necessary

RIGHT-SIZED MODEL:      a smaller, faster, cheaper model handles
                       this task with equivalent accuracy

The engineering question is never “which model is smartest” — it’s “which model is the CHEAPEST and FASTEST option that meets this specific task’s quality bar.” Module 16 (Cost Engineering) and Module 17 (Latency Engineering) both build directly on this framing.


3. The Selection Dimensions

DimensionWhat It Means
QualityDoes the model perform well on THIS specific task, not benchmarks in general
LatencyTime to first token and total generation time — varies enormously by model size
CostPrice per token — varies by 10-40x across model tiers
Context windowHow much input the model can accept at once
Tool calling / structured outputDoes the model support reliable function calling (Module 9)?
Multilingual supportvaries significantly by model and training data
PrivacyCan data leave your infrastructure, or must it stay on-premises?
Reliability / availabilityProvider uptime, rate limits, SLA guarantees
LicensingCan you use this model commercially, and under what terms?

4. Small vs. Large Models — A Real-World Analogy

Sending a SIMPLE package across town: you use a BICYCLE COURIER --
fast, cheap, sufficient.

Sending FRAGILE, complex cargo across the country: you
use a SPECIALIZED FREIGHT CARRIER -- slower and more expensive, but
necessary for the task's real requirements.

Using the freight carrier for the simple package is wasteful. Using the bicycle courier for fragile cross-country cargo
fails.

This is precisely why “model routing” (sending different tasks to different models) is a standard production pattern, not a premature optimization — different parts of even ONE application have different requirements.


5. Reasoning Models vs. General-Purpose Models

GENERAL-PURPOSE MODEL:      optimized for broad,
                           conversational capability -- fast, and
                           sufficient for most tasks

REASONING MODEL:                optimized for MULTI-STEP,
                               careful reasoning -- slower
                               and more expensive, reserved for tasks
                               where getting the reasoning right
                               matters more than speed

Incorrect idea: Using a reasoning model for a task that doesn’t require deep, multi-step reasoning is a common, real cost and latency mistake — Module 29 (Anti-Patterns) covers this directly.

Why it is incorrect: This shortcut removes a validation or control boundary, allowing an error to pass into later stages where it becomes harder and more expensive to detect.


6. Hosted API vs. Self-Hosted Models

Hosted API (e.g., a provider’s endpoint)Self-Hosted
Operational burdenminimal — provider manages infrastructuresignificant — you manage GPUs, scaling, uptime
Data privacyData leaves your infrastructureData stays under your control
Cost modelPay per token — predictable but scales with usageFixed infrastructure cost — better at very high, sustained volume
Latest modelsimmediate access to provider’s newest modelsrequires your own effort to adopt new open-weight models
CustomizationLimited to provider’s fine-tuning optionsfull control over the model and serving stack

The deciding factors are usually: data sensitivity (self-hosting for regulated or highly sensitive data), sustained volume (self-hosting becomes cost-effective at real scale), and team capacity (self-hosting requires infrastructure expertise most teams don’t have early on).


7. A Complete Decision Framework

1. What is the TASK'S minimum quality bar?
   (classification/extraction: LOW bar; complex reasoning: HIGH bar)

2. What is the latency budget?
   (real-time chat: tight; batch processing: loose)

3. What is the cost sensitivity at expected volume?
   (10 requests/day: cost barely matters; 1M requests/day: cost
   is critical)

4. Does this task require tool calling or structured
   output support?

5. Does this task involve sensitive data requiring
   self-hosting or a specific provider's data policy?

6. Filter candidate models by requirements 1, 2, 4, 5 -- THEN
   pick the CHEAPEST option among what remains (requirement 3)

8. A worked developer example

TechCorp routes different parts of its support assistant to different models:

Sub-taskModel TierWhy
Classify ticket urgencySmall, fast modelSimple classification, low quality bar, tight latency needed
Draft the customer-facing responseMid-tier modelneeds good language quality, moderate latency budget
Investigate a complex, multi-system billing disputeLarge reasoning modelneeds careful, multi-step reasoning; latency budget is looser since this runs less often

This is model routing (Module 16) in practice — not every request in one system uses the same model.


9. How Is This Used in the Industry?

🤖 How Is This Used in the Industry?

Mature AI engineering teams route different tasks to different models based on this exact framework, rather than standardizing on one model for an entire application — this alone is often one of the single highest-leverage cost optimizations available (Module 16), precisely because most production traffic is simple tasks that don’t need the most expensive model.


10. Common Mistakes

Incorrect idea: Defaulting to the most capable available model for every task.

Why it is incorrect: This shortcut removes a validation or control boundary, allowing an error to pass into later stages where it becomes harder and more expensive to detect. As shown directly in Section 2, this is wasteful for the majority of real production traffic.

Incorrect idea: Choosing a model based on a leaderboard ranking rather than performance on your specific task.

Why it is incorrect: Benchmarks measure general capability, not your specific use case’s requirements.

Incorrect idea: Ignoring data privacy requirements until a compliance review forces a late, costly architecture change.

Why it is incorrect: Section 6’s hosted-vs-self-hosted decision should happen early, not after a security review flags it.


11. Code — A Model Selection Decision Function

What this shows: turning Section 7’s decision framework into a working function — the kind of explicit routing logic a real orchestration layer (Module 3) would actually run per request.

from dataclasses import dataclass
from enum import Enum

class TaskComplexity(Enum):
    SIMPLE = "simple"      # classification, extraction, short Q&A
    MODERATE = "moderate"  # summarization, multi-step reasoning
    COMPLEX = "complex"    # deep, multi-step reasoning or planning

@dataclass
class ModelCandidate:
    name: str
    relative_cost: float       # illustrative $ per 1M tokens
    relative_latency_ms: int
    reasoning_quality: int     # illustrative 1-10 scale

# Three different model tiers -- exactly Section 4's
# bicycle-courier vs. freight-carrier spectrum.
CANDIDATES = [
    ModelCandidate("small-fast-model", relative_cost=0.15, relative_latency_ms=200, reasoning_quality=5),
    ModelCandidate("mid-tier-model", relative_cost=1.50, relative_latency_ms=600, reasoning_quality=7),
    ModelCandidate("large-reasoning-model", relative_cost=6.00, relative_latency_ms=2500, reasoning_quality=9),
]

def recommend_model(task: TaskComplexity, latency_budget_ms: int, cost_sensitive: bool) -> ModelCandidate:
    """Directly implements Section 7's decision framework -- filters
    candidates by requirements (latency, minimum quality),
    then picks the cheapest option that still meets the bar."""
    min_quality = {"simple": 4, "moderate": 6, "complex": 8}[task.value]

    eligible = [c for c in CANDIDATES
                if c.relative_latency_ms <= latency_budget_ms and c.reasoning_quality >= min_quality]

    if not eligible:
        return None

    if cost_sensitive:
        return min(eligible, key=lambda c: c.relative_cost)
    return max(eligible, key=lambda c: c.reasoning_quality)

# Scenario 1: ticket classification -- Section 8's first row
pick1 = recommend_model(TaskComplexity.SIMPLE, latency_budget_ms=500, cost_sensitive=True)
print(f"Simple task, tight latency, cost-sensitive: {pick1.name}")

# Scenario 2: complex billing investigation -- Section 8's third row
pick2 = recommend_model(TaskComplexity.COMPLEX, latency_budget_ms=5000, cost_sensitive=False)
print(f"Complex task, generous latency: {pick2.name}")

Expected Output:

Simple task, tight latency, cost-sensitive: small-fast-model
Complex task, generous latency: large-reasoning-model

What this confirms: the SAME function correctly routes two different tasks to two different models, purely based on stated requirements — exactly Section 8’s TechCorp routing table, made into real, reusable decision logic rather than an informal team convention.


12. Production Considerations

  • Model selection is NOT a one-time decision — provider pricing, model capabilities, and your own traffic patterns all change over time, so this decision should be revisited periodically
  • Track actual observed quality per model per task (Module 10-11), not just assumed quality — a smaller model may perform better than expected on your specific data

13. Trade-offs

  • Model routing (using different models for different tasks) adds engineering complexity — more code paths, more things to test and monitor — in exchange for cost and latency savings
  • Self-hosting trades operational burden for data control and, at sufficient scale, cost savings

14. Chapter Summary

Model selection is a repeatable engineering decision, not a “pick the smartest model” default. The right model for a given task is the cheapest, fastest option that meets that task’s specific quality bar — which usually means different parts of one system should use different models.

This decision also spans hosted vs. self-hosted infrastructure, driven largely by data sensitivity and sustained volume.


15. Visual Cheat Sheet

Task's minimum quality bar
        +
latency budget
        +
cost sensitivity at expected volume
        =
Filter candidates -> pick CHEAPEST that clears the bar

16. Top Takeaways

  1. The right model is the cheapest/fastest option that meets a specific task’s quality bar — not the most capable model available.
  2. Different tasks within ONE application often warrant different models (model routing).
  3. Reasoning models are slower and more expensive — reserve them for tasks that need multi-step reasoning.
  4. Hosted vs. self-hosted is driven mainly by data sensitivity and sustained volume, not just preference.
  5. Model selection should be revisited periodically, not decided once and forgotten.

17. Interview Questions

Q: 1. A team wants to use the most capable available model for every request in their application. What would you push back on and why?**

Ans: Most production traffic is simple (classification, extraction, short Q&A) and doesn’t need the most capable model’s full reasoning ability — using it everywhere is an unnecessary cost and latency expense. I’d propose model routing: profile the actual tasks in the system and match each to the cheapest model that meets its quality bar.

  • Why it matters: This is often one of the highest-leverage, lowest-risk cost optimizations available in a real production system.
  • Real-world example: Section 8’s TechCorp routing table.
  • Common mistake: Assuming model choice is a single, application- wide setting rather than a per-task decision.
  • Interviewer is testing: Whether the candidate thinks about cost and latency as first-class engineering concerns, not afterthoughts.
  • Likely follow-up: “How would you measure whether a smaller model is good enough for a given task?” → Module 10-11’s evaluation framework, run per model candidate.

Q: 2. When would you choose to self-host a model instead of using a hosted API?**

Ans: Primarily when data sensitivity requires that data never leave your own infrastructure (regulatory or contractual requirements), or when sustained volume is high enough that fixed infrastructure cost beats pay-per-token pricing over time.

  • Why it matters: Self-hosting is a significant operational commitment — choosing it without a real driving reason adds unnecessary infrastructure burden.
  • Real-world example: A healthcare company handling regulated patient data may be contractually or legally required to keep all data on-premises, making self-hosting close to mandatory regardless of cost.
  • Common mistake: Self-hosting purely for perceived cost savings without actually modeling the break-even volume against a hosted API’s pricing.
  • Interviewer is testing: Whether the candidate can reason about this decision with trade-offs rather than a fixed opinion.
  • Likely follow-up: “How would you estimate the break-even volume?” → Compare fixed infrastructure + ops cost against hosted API’s per-token pricing at your expected request volume.

18. Scenario-Based Question

Scenario: TechCorp’s support assistant uses one large reasoning model for every request, including simple “what are your business hours” questions. The team is asked to cut AI costs by 60% without degrading the quality of complex responses.

  • Problem Analysis: Section 2’s mistake — using an expensive model uniformly, regardless of per-task requirements.
  • How to Think: The cost problem and the quality requirement are NOT in conflict, because most traffic doesn’t actually need the expensive model’s capability.
  • Investigation: Profile actual request volume by task type — how much traffic is simple vs. complex?
  • Root Cause: No model routing; one model tier used for all traffic regardless of task complexity.
  • Solution: Apply Section 7’s framework — route simple classification and lookup-style questions to a small, fast model; reserve the large reasoning model only for complex, multi-step cases.
  • Trade-offs: Requires engineering work to classify incoming requests by complexity and add routing logic to the orchestration layer (Module 3) — a real, one-time cost for an ongoing savings.
  • Production Considerations: Track quality (Module 10) per model tier after the change to confirm complex-case quality didn’t degrade — this validates the optimization rather than just assuming it worked.

19. Next Step

Next: Module 5 — Prompt Engineering as Software Engineering — treating prompts as production artifacts: templates, versioning, testing, and defense against injection.

Author
TechByteByByte Editorial Team
Reviewed by
TechByteByByte Admin
Published
Last reviewed