All notable changes to QuantLLM are recorded here. The format follows Keep a Changelog and the project adheres to Semantic Versioning.
- Native HQQ Quantization (
quantllm/quant/hqq.py). Half-Quadratic Quantization produces state-of-the-art quality at 2-4 bits without requiring calibration data. Supports 2/3/4/8-bit weight-only quantization of linear layers with per-channel normalization and half-quadratic splitting optimization. quantllm serveInference Server. OpenAI-compatible FastAPI server with/v1/chat/completionsand/v1/completionsendpoints, streaming via SSE, auto-detection of transformers vs llama-cpp-python backends, and model warmup on startup.quantllm benchBenchmark Suite. Measures prefill throughput, decode throughput, peak VRAM, and latency. Results auto-save tobenchmark_results.jsonfor regression tracking.quantllm compareHardware Auto-Benchmark. Detects CPU/GPU/RAM, runs micro-benchmarks, scores quantization methods and export formats, and prints ranked recommendations. Caches to~/.cache/quantllm/hardware_profile.json.- Dynamic Model Registry (
quantllm/registry.py). Fetches curated models from theQuantLLMHuggingFace organization. Supportsquantllm models list,quantllm models search,quantllm models info, and programmatic model registration viaregister_model(). - Expanded CLI with subcommand groups.
quantllm --helpnow shows:version,info,convert,finetune,export,serve,bench,compare,models,register. - HQQ_QUANT_TYPES mapping matching GGUF types for cross-compatibility.
- Version bumped to
2.2.0.devfor active development. pyproject.tomlnow includes[server]and[bench]optional dependency groups.
2.1.0 — 2026-07-29
is_quantizedno longer lies about the loaded model state. The attribute is now a derived property readingmodel.config.quantization_config(and BitsAndBytes layer types) at call time. This fixes three concrete bugs in v2.1.0rc1:from_config_only=Truepreviously left_is_quantized=Trueeven thoughAutoModelForCausalLM.from_config(...)returns a random- weights model with no quantization. The flag is nowFalseand a warning is emitted to make the random-weights nature explicit.- A missing
bitsandbytesinstall used to silently fall through to full precision while keeping_is_quantized=True. We now log a descriptive warning and reportFalse. - Pre-quantized HF repos that already shipped a
quantization_config(GPTQ, AWQ, etc.) are now correctly reported as quantized regardless of the user'squantize=Falseflag.
DEFAULT_ARCHITECTURE_FALLBACKSis now actually consulted. The fallback table introduced by PR #27 was dead code whenever HF returned a non-emptymodel_type(i.e. always).resolve_model_typenow checks the table directly and recognises common version-suffix patterns (qwen3→qwen2,llama4→llama,phi4→phi3,gemma3→gemma2, etc.).register_architectureclass lookup now uses the natural API. Callingregister_architecture("newmodel", base_model_type="llama", model_class=NewModel)previously stored the class under"newmodel"but looked it up under"llama", so the fallback path silently ignored it. The lookup now tries the originalconfig.model_typefirst and falls back to the resolved base family.- Removed an accidentally duplicated
if is_bnb and is_8bit ...block in the existing-quant detection branch ofTurboModel.from_pretrained.
TurboModel.is_quantizedpublic property plusTurboModel.report()returning a structured dict (model_id,params_billion,requested_bits,effective_loading_bits,is_quantized,quant_method,device,dtype,finetuned,lora_applied). Usereport()to assert programmatically what the loader actually produced.- Pre-quantized repo detection. Repository names matching
*-bnb-4bit,*-bnb-8bit,*-AWQ,*-GPTQ,*-INT4,*-INT8,*-FP8,*-EETQ,*-HQQ,*-AQLMlog a friendly hint that the embeddedquantization_configwill be honoured rather than re-quantized. - GGUF-only repo hint. When a name contains
-gguf/.gguf,from_pretrainedwarns and points the user atfrom_gguf. - Expanded
DEFAULT_ARCHITECTURE_FALLBACKStable covering Llama 2/3/4, Mistral / Mixtral, Qwen 2 / 2-MoE / 3, Phi / Phi-3 / Phi-4, Gemma / Gemma 2 / Gemma 3, Falcon, Cohere / Command-R, DeepSeek (V2/V3), OLMo / OLMo 2, SmolLM / SmolLM 2 / SmolLM 3, Yi, StarCoder / StarCoder 2, InternLM / InternLM 2, Baichuan, ChatGLM and StableLM. - Real CI workflow at
.github/workflows/ci.ymlrunning ruff, pytest on Python 3.10 / 3.11 / 3.12, andpython -m build+twine checkon every PR. pyproject.tomlproviding PEP 517 / 518 build metadata, a conservative ruff lint profile and pytest defaults..pre-commit-config.yamlfor local enforcement (whitespace, end-of-file fixer, large-file guard, ruff with autofix).docs/guide/consumer-hardware.mddocumenting expected behaviour on every tier of consumer hardware (CPU-only, ≤ 8 GB VRAM, 12 – 24 GB, Apple Silicon, multi-GPU) and how to inspect the loaded state.- Regression tests for every fix above:
tests/test_quantization_state.py— runtime quantization state tracking,from_config_onlyhonesty,report()schema.tests/test_resolve_model_type.py— fallback table consultation, family-suffix matching, registry-class lookup ergonomics.
TurboModel.__repr__now reads from the newis_quantizedproperty and degrades gracefully whennum_parameters()is unavailable (mocked / lazily-loaded models).TurboModel.from_ggufnow sets_is_quantized_override = Truerather than mutating an attribute the type system thought was a property -- this is functionally identical but more honest about the contract.- The "bitsandbytes not installed" warning now explains how to install it and explicitly states that loading falls back to full precision.
2.0.0 — 2025-12-21
Initial public release of the turbo() API and the GGUF / ONNX / MLX
export pipeline. See the GitHub
releases page
for the full notes.