The Model Is Not the Product

%alireza rashidi data science%
Prompting
The Model Is Not the Product — Choosing the Right LLM
LLM Inference Field Guide

The model is not the product.

Choosing an LLM is not a shopping exercise. You are selecting a behavior, an artifact, and a serving configuration that must survive real traffic, real constraints, and real failures. The best model is the smallest operable system that clears your release bar.

A leaderboard can introduce candidates. It cannot tell you which configuration will obey your policy, fit your hardware, meet your tail-latency target, or survive your traffic mix.

01— Workload

Begin with a contract, not a model name.#

“Which LLM is best?” is incomplete. Best for which inputs, which decisions, which latency target, which failure cost, and which deployment boundary? Fix those variables before you compare candidates.

Use one concrete system. Ticket SUP-4821 arrives in Persian: a customer says a refund never appeared. Your support copilot must identify the issue, retrieve the applicable refund policy, return a strict JSON object, and draft a short reply in the customer’s language. It may explain the next step. It may not claim that a refund was issued unless a tool confirms it.

The product serves 40 requests per second at peak. At least 95% of tickets must reach the correct queue. The P95 time to first token must remain below 800 milliseconds. The service has a fixed monthly inference budget and cannot send account data outside approved regions. Those statements do more selection work than “use a powerful reasoning model.” They create gates a candidate can pass or fail.

The Modular handbook provides a useful taxonomy—base, instruct, chat, dense, Mixture of Experts, specialist models, hubs, and weight formats.[1] Taxonomy helps you read the shelf. It does not replace a workload contract. Production selection is a constrained optimization problem: eliminate models that cannot satisfy hard constraints, establish a quality threshold, then optimize the survivors for cost and speed.

01 / BEHAVIORName the decision

Route the issue, ground the answer, produce valid JSON, and abstain when evidence is missing.

02 / SERVICEName the traffic

Languages, context lengths, peak concurrency, output lengths, and retry distribution.

03 / BOUNDARYName the limits

Latency, cost, privacy, region, licensing, safety, and hardware capacity.

Candidate value = quality above threshold − operational cost − failure cost

Do not collapse performance into average latency. An interactive assistant cares about time to first token and inter-token latency. A multi-call agent cares about end-to-end completion because one slow step blocks the next. An offline batch may care mostly about throughput. Tail latency matters because your users experience the slow requests, not the mean. Goodput—the number of requests that meet an explicit service objective—is often more honest than raw tokens per second.[2][3]

A benchmark score is evidence about a model under one protocol.Your release decision is evidence about a complete system under your workload.

Your deployable unit is a configuration: provider or repository, immutable revision, base or post-trained variant, chat template, tokenizer, weight format, quantization method, inference engine, engine version, hardware topology, context limit, batching policy, and generation settings. Change any one of these and you may change quality, memory, latency, or all three.

For a hosted API, the equivalent unit includes the stable model identifier, reasoning setting, tools, response schema, region, rate limits, retry policy, and provider version guarantees. “We tested Model X” is not a reproducible statement. “We tested snapshot X with prompt v12, schema v4, retrieval index r18, and the recorded traffic distribution” is.

Selection record for SUP-4821
candidate:
  model_revision: immutable-id
  interface: chat-template-v3
  artifact: safetensors | bf16
  runtime: engine-version + hardware
  workload: support-eval-v5
  limits: 8k input | 300 output | 40 rps
  result: quality + p95_ttft + goodput + cost/success
02— Families

Choose the kind of intelligence before its size.#

Model labels describe training history, architecture, or modality. They are clues—not guarantees. Read the model card and interface, then test the behavior you need.

A base language model is commonly trained through self-supervised next-token prediction over a large corpus. It learns patterns that support completion, in-context learning, and many latent capabilities. Saying it “cannot follow instructions” is too absolute. The useful operational statement is narrower: it was not post-trained for the assistant interaction contract you expect.

Choose a base model when you intend to continue pretraining, study raw model behavior, or build your own post-training pipeline. For SUP-4821, that is usually unnecessary work. The product needs instruction following, safe abstention, tool use, and a response schema. A post-trained candidate offers a more relevant starting point. The InstructGPT results famously showed that a much smaller post-trained model could be preferred over a far larger pretrained model on the evaluated prompt distribution—parameter count alone did not determine usefulness.[4]

Instruction tuning exposes a model to tasks and desired responses. Preference optimization may further shape helpfulness, safety, and style. “Instruct” and “Chat” are not standardized stages shared by every vendor. Many conversational models are called instruct models. The name is less important than the model card, intended use, supported features, and required chat template.

A chat template converts role-and-content messages into the exact token sequence a model was trained to interpret. Control tokens differ between families. Using the wrong template can quietly damage performance even when the weights load correctly.[5] A chat model is also not inherently stateful: your application or provider usually resends conversation history. The model interprets that serialized history; its weights do not remember the previous API call.

Name-driven selection

Assumes every “Chat” model owns memory and every “Instruct” model behaves like a single-turn command processor.

Interface-driven selection

Checks the template, message roles, tool protocol, schema support, context handling, and evaluation results.

SUP-4821 does not need one giant model to impersonate an entire system. An embedding model can retrieve semantically related policy passages. A reranker can reorder those candidates. A deterministic service can fetch account status. A generator can synthesize the grounded reply. Vision-language and speech models belong only when the input actually contains images or audio.

This is not an argument for maximum composition. Every component adds a versioned interface, latency, monitoring, and another failure mode. Add a specialist only when the system-level evaluation shows that it improves the outcome enough to justify that burden. A fixed classifier may beat a generator for a closed label set. A keyword rule may beat both for a stable compliance phrase.

A multi-model system for ticket SUP-4821
The SUP-4821 multi-model system The customer ticket enters a retrieval and account-data layer, then a generative model produces a structured answer that a validation gate either releases or escalates. EVIDENCE LAYER DECISION LAYER SUP-4821PERSIAN TICKET EmbeddingPOLICY SEARCH Account toolREFUND STATUS EvidenceBUNDLE GeneratorJSON + DRAFT ValidateRELEASE Human queueFAIL CLOSED SOLID = REQUEST FLOW · DASHED = ESCALATION · ORANGE = GENERATIVE DECISION

How to read this: the LLM owns synthesis, not every operation. Retrieval and account status become explicit evidence; validation decides whether the answer is released or escalated. Remove a component if the end-to-end evaluation shows it adds no value.

03— Deployment

Read the architecture and artifact correctly.#

Parameter counts, weight formats, and quantization labels are compressed descriptions. They become useful only when you understand what they include—and what they leave out.

In a dense transformer block, the same feed-forward parameters participate for each token. A sparse Mixture-of-Experts block contains several learned subnetworks and a router that activates a subset. Mixtral 8x7B, for example, routes each token to two of eight feed-forward experts and reports 47 billion total parameters with about 13 billion active per token.[6]

Do not imagine an expert as a labeled human specialist for mathematics, code, or Persian. It is a learned subnetwork. Specialization can be overlapping, shallow, or difficult to interpret. Sparse activation can lower arithmetic per token relative to activating all parameters, but the full weights still need storage or distribution. Routing, all-to-all communication, load imbalance, batch shape, kernels, and hardware topology decide whether theoretical savings become real throughput.

Dense budget

Total parameters are broadly aligned with parameters used per token. Serving is conceptually simpler, though large dense models remain expensive.

MoE budget

Total parameters describe resident capacity; active parameters describe part of per-token compute. Neither number alone predicts latency or VRAM.

A suffix such as 30B-A3B describes roughly total and active parameter counts—not the total and active number of experts. The official Qwen3-30B-A3B model card separately lists 30.5B total parameters, 3.3B activated parameters, 128 experts, and eight activated experts.[7] Naming is metadata; the model card is the contract to inspect.

PyTorch checkpoints, Safetensors, and GGUF solve different packaging and runtime problems. PyTorch warns that torch.load uses an unpickler and that untrusted data must never be loaded casually. Current weights_only=True restricts what may be reconstructed, but executable repository code remains a separate concern.[8]

Safetensors stores tensor metadata and raw tensor data without the pickle mechanism. It supports lazy and memory-mapped access and narrows the weight-deserialization attack surface.[9] It does not certify the tokenizer, custom Python code, license, training data, or model behavior. A safe container is not a safe product.

GGUF is a versioned binary container used by the GGML and llama.cpp ecosystem. It can carry architecture, tokenizer, metadata, tensor types, and weights. GGUF is commonly associated with local quantized models, but quantization is optional in the specification.[10] Choose it when your runtime supports the architecture and artifact you need—not because the extension itself promises speed.

Quantization represents weights, and sometimes activations or caches, with lower precision. It can reduce memory and enable a model that otherwise would not fit. It does not guarantee proportional latency improvement or zero quality loss. Hardware support, kernels, dequantization overhead, calibration data, model family, task, and bit width all matter.[11]

weight bytes ≈ total parameters × bits per parameter ÷ 8

That formula is a floor for weight storage, not a serving-capacity estimate. KV cache grows with context length and concurrent requests. Activations, workspace buffers, communication, runtime allocations, and CUDA graphs need room too.[18] For MoE, use total parameters when reasoning about resident weights and active parameters as one signal about arithmetic per token.

The file that fits is not automatically the system that serves.Benchmark memory and latency at the context lengths, concurrency, and output distribution you expect.

Hugging Face and other hubs distribute weights, tokenizers, configuration, adapters, code, evaluations, and documentation.[17] A model card should explain intended use, limitations, training information, and evaluation results, but cards are publisher-authored and vary in completeness.[12] Verify publisher identity, lineage, immutable revision, license file, training disclosures, template, required executable code, and the exact artifact you plan to run.

“Available weights” does not automatically mean “open source” or “commercially usable.” A metadata field is not independent legal certification. Gating has a specific meaning on Hugging Face: users request access and share information with the model author; approval may be automatic or manual and can later be revoked.[13] Gating alone does not prove stricter license terms, weak engineering quality, or poor availability. Inspect each condition directly.

For hosted APIs, the supply-chain review changes shape: examine data controls, region availability, retention, rate limits, tool support, stable identifiers, deprecation policy, and provider terms. Self-hosting gives you more control over data and runtime, but also makes capacity, patching, monitoring, model loading, abuse controls, and incident response your responsibility.

04— Selection

Let the workload eliminate candidates.#

Public benchmarks create a shortlist. Your fixed evaluation set, deployment stack, and release thresholds choose the winner.

Start with a capable candidate to establish a quality ceiling. Build the full behavior: prompt, retrieval, tools, response schema, safety checks, and retry policy. Once it clears the quality bar, test smaller models, shorter contexts, lower reasoning settings, quantized artifacts, caching, or routing. OpenAI describes the same general sequence: optimize for accuracy first, then preserve it with the cheapest and fastest option.[14]

For SUP-4821, the evaluation set should contain English and Persian tickets, obvious and ambiguous refund cases, missing account evidence, conflicting policy passages, malformed customer input, tool failures, long histories, and prompt-injection attempts. Measure routing accuracy by language and issue type, JSON validity, required-field completion, groundedness, unsupported refund claims, correct abstention, tool-call correctness, output length, retry rate, and human escalation.

Use deterministic checks for schema, labels, tool arguments, forbidden claims, and policy identifiers. Use calibrated human review—or a model grader validated against human judgments—for tone and nuanced groundedness. Measure P50 and P95 time to first token, inter-token latency, end-to-end latency, goodput, peak memory, and cost per successful request. Cost per token hides retries, escalations, and downstream corrections.

The selection funnel for SUP-4821
The SUP-4821 model-selection funnel Candidates move from a workload contract through capability, legal and operational, quality, and serving gates until one versioned deployable configuration remains. 01 · CONTRACTWorkloadSUCCESS + SLO 02 · CLASSCapabilityTEXT + TOOLS 03 · BOUNDARYLegal + opsLICENSE + REGION 04 · EVALQuality gate95% + NO CLAIMS 05 · SERVEBenchmarkP95 + GOODPUT 06ShipPINNED EACH GATE REMOVES CANDIDATES · THE OUTPUT IS A VERSIONED CONFIGURATION Rejected candidates remain useful evidence: record why each one failed.

How to read this: move left to right and stop a candidate as soon as it fails a hard gate. Only candidates that clear quality are worth fine-grained serving optimization. The final object is pinned and reproducible—not merely a model family name.

Public evaluations are useful for screening. They rarely match your languages, policy constraints, context distribution, tool protocol, quantization, or hardware. Compare candidates on the same held-out cases, prompt, retrieval corpus, sampling policy, concurrency schedule, and maximum lengths. Warm-up behavior, prefix caching, batching, and rate limiting must match the intended service.

Pin API snapshots and repository revisions. Re-run the suite when the model, prompt, tokenizer, template, retrieval index, tools, runtime, drivers, quantization, or hardware changes. Production failures should become regression cases. OpenAI and Anthropic both frame evaluation as an iterative discipline built around task-specific success criteria—not a final demonstration after the system has already been chosen.[15][16]

95%minimum correct routing target
800msP95 TTFT ceiling
40 rpspeak arrival rate
0unsupported refund claims allowed

These are workload requirements for the fictional SUP-4821 system, not claims about a particular model. They are valuable because they force a decision. Candidate A may be cheapest per token but fail the Persian routing threshold. Candidate B may pass quality but miss tail latency under concurrency. Candidate C may fit the GPU only at a quantization level that creates unacceptable grounding errors. The first configuration that passes every hard gate becomes a credible release candidate.

Then optimize on the Pareto frontier. A model is dominated when another candidate is at least as good on every decision metric and better on one. Keep tradeoffs visible: quality, latency, cost per successful request, operational complexity, and risk. A single weighted score can hide a safety failure behind a speed improvement, so hard constraints should remain gates rather than negotiable points.

The winning model is provisional.Monitor drift, pin versions, canary changes, and keep a rollback configuration that already passed the same evaluation.

For SUP-4821, begin with the strongest operable candidate to learn what good looks like. If a smaller model matches its task-level quality, use the smaller one. If a quantized artifact preserves the release metrics, keep the memory saving. If routing easy tickets to a small model cuts cost without increasing false claims or escalations, add routing. If the router’s own errors and operational burden erase the benefit, return to one model.

This is the deeper point hidden beneath every model catalog: the model is a replaceable component inside a measured product. Your durable asset is the workload contract, evaluation set, deployment record, observability, and rollback path. Those artifacts let you adopt a better model without restarting the decision from folklore.

Choose = simplest configuration that clears every hard gate and lies on the measured frontier

The Modular handbook is a useful map of the vocabulary you will encounter.[1] Use it to understand candidate classes and formats. Then go further: verify the model card, interpret architecture labels carefully, benchmark the exact runtime artifact, and let your own workload make the final choice.

05— Sources

Read the contracts behind the labels.#

Model catalogs change quickly. These primary sources support the mechanisms and decision rules in this article; always verify the current model card, runtime documentation, and provider terms before deployment.

  1. Choosing the right model. Modular LLM Inference Handbook. Read the handbook
  2. Key metrics for LLM inference. Modular LLM Inference Handbook. Read the guide
  3. Benchmark CLI. vLLM documentation. Read the documentation
  4. Training language models to follow instructions with human feedback. Ouyang et al., 2022. Read the paper
  5. Chat templates. Hugging Face Transformers documentation. Read the documentation
  6. Mixtral of Experts. Jiang et al., 2024. Read the paper
  7. Qwen3-30B-A3B model card. Qwen. Read the model card
  8. torch.load. PyTorch documentation. Read the API reference
  9. Safetensors. Official repository and format rationale. Read the repository
  10. GGUF specification. GGML project. Read the specification
  11. Quantization. Hugging Face Transformers documentation. Read the documentation
  12. Model cards. Hugging Face Hub documentation. Read the documentation
  13. Gated models. Hugging Face Hub documentation. Read the documentation
  14. Model selection. OpenAI API documentation. Read the guide
  15. Evaluation best practices. OpenAI API documentation. Read the guide
  16. Define success criteria and build evaluations. Anthropic documentation. Read the guide
  17. Models and repositories. Hugging Face Hub documentation. Read the documentation
  18. Calculating GPU memory for serving LLMs. Modular LLM Inference Handbook. Read the guide
Ali Reza Rashidi
Ali Reza Rashidi
Ali Reza Rashidi, a Senior Data Scientist-Gen Al | Al Architect | MLOps with over ten years of experience, He is the author of three books that delve into the world of data and management.

Leave a Reply

Your email address will not be published. Required fields are marked *