Stop the Download-and-Crash Cycle: Choose the Right Local AI Model with llmfit The open-source terminal tool llmfit has attracted more than 34,000 GitHub stars for pre-flight checking local AI models against a machine's RAM, VRAM, and backend before download. llmfit detects hardware via nvidia-smi, rocm-smi, Intel Arc, Apple Silicon unified memory, and Ascend devices, then evaluates hundreds of Hugging Face model entries, selects a quantization, and scores candidates on quality, speed, fit, and context. The tool estimates memory and throughput rather than guaranteeing runtime behavior, addressing a download-and-crash cycle the project attributes to model discovery rather than hardware limits. Local AI has a discovery problem disguised as a hardware problem. The model catalog is expanding faster than most people can evaluate it. A single family may appear in several parameter sizes, multiple quantizations, different file formats, and runtime-specific variants. The model card tells you what was released. Your computer tells you how much RAM and VRAM it has. The difficult part is connecting the two. That gap produces a familiar cycle: The cost is not only bandwidth. Every failed experiment consumes time, disk space, and attention. llmfit https://github.com/AlexsJones/llmfit is an open-source terminal tool built to put a pre-flight check in front of that workflow. It detects the machine, evaluates a catalog of models, chooses a feasible quantization, estimates speed and memory fit, and ranks the results before you download anything. The project has attracted more than 34,000 GitHub stars, which is a strong signal that this is a widely shared problem. 1 The important word, however, is estimate . llmfit can replace blind guessing with an inspectable model of your hardware. It cannot promise that every runtime, driver, model file, workload, and context length will behave exactly as predicted. Used with that distinction in mind, it is one of the most useful planning tools in the local-LLM stack. A model can fit on paper and still be a poor choice in practice. First, the weights need somewhere to live. On a discrete GPU, the ideal path is usually to keep them in VRAM. If they spill into system RAM, the model may still run through CPU/GPU offloading, but generation can slow dramatically. On Apple Silicon, CPU and GPU share a unified memory pool, so the calculation follows a different path. Second, quantization changes the memory-quality trade-off. A heavily compressed model may fit where a higher-precision variant does not, but “fits” does not mean “best.” The strongest quantization that fits with sensible headroom is often more useful than the smallest possible file. The underlying llama.cpp ecosystem itself distinguishes many encodings — from Q2 variants through Q8 — with different storage and quality characteristics. 2 Third, context consumes memory. The model’s weights are only part of the budget. During inference, the runtime stores key and value tensors for previous tokens in a KV cache. That cache grows with sequence length, so a model that works comfortably at 4K context may become marginal at 32K. 3 Finally, usable performance depends on the execution path. A technically runnable model generating two tokens per second is a very different experience from one generating 30. So the real question is not: Can this model start? It is: Which model, quantization, context length, and runtime give me the best useful experience on this hardware? That is the question llmfit tries to answer. Run llmfit with no arguments and it opens an interactive terminal interface. At startup, it detects RAM, CPU, GPU or accelerator, VRAM, and the available backend. Its documented hardware paths include NVIDIA through nvidia-smi, AMD through rocm-smi, Intel Arc, Apple Silicon unified memory, and Ascend devices. Support varies by platform; for example, Android GPU autodetection is not currently supported. 4 It then evaluates hundreds of model entries drawn from Hugging Face metadata and embedded into the llmfit release. For each candidate, it searches a quantization hierarchy, estimates memory requirements at the relevant context, selects a run mode, and calculates four scores: 5 Dimension What it is trying to representQualityModel family, scale, quantization penalty, and task alignmentSpeedEstimated token-generation throughput on the detected backendFitHow safely the model uses the available memoryContextHow the feasible context compares with the target use case Those dimensions feed a composite score. The weights change with the requested use case: coding, reasoning, chat, multimodal, embedding, or general use. In other words, a larger general model should not automatically outrank a smaller coding specialist when you ask for a coding recommendation. Fit is also more nuanced than a green or red light. llmfit classifies run paths such as full GPU, CPU/GPU offload, CPU-only, and Mixture-of-Experts offload, then labels the result from Perfect through Good , Marginal , and Too Tight . The terminology communicates an operational truth: starting a model and running it comfortably are not the same achievement. Autoregressive token generation often spends much of its time moving model weights through memory. llmfit uses this property to estimate throughput with a memory-bandwidth model. Its documented baseline is: tokens per second ≈ memory bandwidth / model size × efficiency factor The calculation is adjusted for quantization and execution modes such as pure GPU, CPU offload, MoE offload, and tensor parallelism. For recognized GPUs, llmfit uses a hardware bandwidth table; for unknown devices, it falls back to backend-level constants. 5 This produces a better starting point than parameter count alone, but it is still a model. Runtime implementation, kernel efficiency, prompt processing, thermal behavior, background memory use, driver versions, and architecture-specific details can move the real result. The project has responded to that limitation in a good way: it made the estimates inspectable and added measurement. llmfit info "