AI Architecture / 7 min read
Local AI: quality is also designed at inference
Reasoning, context and response time: how to design local inference so a model’s capabilities become verifiable results.
The quality of a local AI system also depends on the resources we assign to each request. A model can fit in a workstation's memory and still require processing times or amounts of context that are incompatible with the work at hand. Between being able to run it and using it effectively there is a design decision.
Imagine an assistant tasked with fixing a software bug. Producing a plausible change is one part of the job. It must identify the relevant files, interpret the dependencies, run the tests, and understand whether the fix introduces a regression. How fast it produces text matters, but the result depends on being able to complete this path.
This is where the gap between a model that is competitive in benchmarks and a disappointing local install can emerge. The weights can belong to the same version, while the reasoning budget, the numerical precision, the available context, and the tooling all change. The capability measured in the benchmark becomes useful only if the system can sustain the conditions in which it is used.
The same model, different execution choices
A documented example is the Qwen3 family introduced in April 2025. The team describes two modes integrated into the same model: thinking, which generates reasoning steps before the final answer, and non-thinking, which answers directly. In the published evaluations, it also shows how performance can improve as the reasoning budget grows. These are the producer's results on specific evaluations, not a measure of any workstation's performance. The relevant point is the mechanism: the amount of computation used during inference contributes to the result, even without changing the weights. (Source: Qwen)
The distinction is concrete in the interface too. The Qwen3-32B model card documents the enable_thinking parameter, which turns that mode on or off in the conversation template. Separately, the generation limit determines how many new tokens the model can produce. Reasoning mode and maximum budget are therefore different controls. (Source: Qwen3-32B model card)
This example does not prove that spending more computation improves every answer. It shows why choosing the model does not exhaust the choice of the system.
Extracting dates and amounts from a well-structured document may only need a direct answer, checked against the source text. Analysing an error that spans several components may benefit from leaving room for more extensive processing. Applying the same configuration to both cases means ignoring the difference between the jobs.
The operational question becomes: on which tasks does the additional computation produce an improvement that justifies the wait?
From the score to the conditions that make it possible
A benchmark compresses an evaluation into a number. Transferring that result to an application requires recovering what the number summarises: model version, execution mode, generation budget, context, and evaluation criteria. In agentic tasks, tools, allowed attempts, and the way the environment is interacted with also come into play.
Reducing the budget to make a demonstration faster can be a sensible choice. But it changes the system being evaluated. The same holds when using quantised weights or a smaller context window.
For someone designing an application, the benchmark should therefore serve to select candidates to try. The final decision requires a comparison on real work.
In the case of the software assistant, the criterion is not how convincing the explanation of the patch looks. It is whether the change fixes the problem, passes the relevant checks, and respects the project's constraints. A fluent answer can fail all of these requirements. A slower answer can satisfy them, but the benefit must be measured.
The performance to buy or build is the verified result, within an acceptable time.
Reasoning and context share the same hardware constraint
On a GPU with 16 GB of VRAM, the first check is often the size of the weights. It is necessary, but it leaves open the more important question: how much memory remains to do the work?
Beyond the weights, inference needs memory for the runtime, the compute buffers, and context management. In common autoregressive transformers, the KV cache stores information used by attention so it does not have to be recomputed for every token. Its consumption depends on the architecture, the precision, and the length of the sequence being handled. Hugging Face's documentation distinguishes cache strategies aimed at different trade-offs between memory and speed. (Source: Hugging Face)
Let's return to the assistant fixing the bug. At first it receives a short description. Then it reads the code, takes in the test output, and compares new information with what it has already gathered. The session grows as the work proceeds.
If the system loses necessary information, it can propose a solution that is incompatible with a constraint read earlier. If it spends too much space on irrelevant content, it consumes resources without helping the decision. If it stops generating before the complete answer, the processing already done may not turn into a usable result.
Reasoning and context must therefore be sized together. One provides room for processing; the other makes the information available to process.
Quantisation can reduce the footprint of the weights and leave more memory for the rest of the execution. It is a useful lever, to be evaluated on the task and on the chosen configuration. A smaller model can also be a better solution if it can sustain the whole session with sufficient quality.
The useful configuration is the one that carries the work through to verification, not the one that occupies all the available memory.
Response time is a design requirement
An assistant used during a conversation and an agent preparing an analysis in the background have different needs. In the first case, the wait interrupts the interaction. In the second, it may be acceptable to devote more time to processing, as long as the result arrives within the expected deadline.
This difference should precede the choice of parameters.
If the application must help a developer during a change, what matters is how often it interrupts their work. If it must examine a set of documents overnight, completeness, processing capacity, and error handling matter more. The model may be the same; the configuration and the success criteria are not.
Tokens per second describe only part of this experience. The total time includes processing the input, generation, tool calls, tests, and any subsequent attempts. Added to these is the human time needed to check or correct the result.
Failure also has a duration. An agent that keeps repeating unproductive attempts can consume more resources than one that recognises a limit early. Timeouts and interruption criteria are therefore part of the quality of the service: they allow changing approach when the processing produces no new evidence.
The reasoning budget should be treated as a resource to allocate. Increasing it makes sense when it improves the probability of completing the task correctly by enough.
Evaluating a configuration means evaluating a decision
Choosing on a sound basis requires a set of representative tasks, accompanied by acceptance criteria. For code, relevant tests and review of the changes. For document analysis, checks against the source documents. For data extraction, checks on the values and the structure of the output.
On these tasks, different configurations can be compared, recording correctness, total time, memory consumption, and human intervention. Model, quantisation, runtime, and parameters must remain identifiable, so the results stay interpretable and the comparison repeatable.
The choice can lead to several execution profiles: a fast one for bounded requests, a more demanding one for hard problems, an alternative path for cases that exceed the available resources. There is no need to introduce an automatic selection system straight away. Even an explicit distinction between types of work can be enough to avoid every request receiving the same treatment.
This approach also changes the local-versus-remote comparison. The question becomes which environment satisfies the task's requirements, considering data, resources, latency, and operating costs. Running locally is an architectural option to evaluate, not a goal to impose on every workload.
From controlling the weights to controlling the service
The value of local AI also lies in the ability to choose versions, configurations, and execution conditions. It is concrete control, but it becomes a professional advantage when it allows building a service whose behaviour is known.
An organisation can accept a less capable model in absolute terms if it completes a bounded task well, within the required time and with adequate checks. It can instead discard a model ranked higher in benchmarks if the operating cost of reaching that quality is incompatible with the application.
Designing inference means deciding which capabilities to make available, for which jobs, and under which conditions. It is in this choice that a downloaded model becomes a usable system: not because it reproduces a ranking on one's own workstation, but because it offers results on which a working process can be built.
About the author
Dario Cargnino
Lead AI Engineer, Senior Pre-Sales Manager
I work across AI strategy, solution architecture and enterprise digital systems, with a particular focus on operational trust, delivery realism and long-term platform resilience.
Article signals
At a glance
- Published
- October 19, 2026
- Reading time
- 7 min read
- Category
- AI Architecture
Topics