quantprobe 1.5.2__tar.gz → 1.6.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {quantprobe-1.5.2/quantprobe.egg-info → quantprobe-1.6.1}/PKG-INFO +1 -1
- {quantprobe-1.5.2 → quantprobe-1.6.1}/pyproject.toml +1 -1
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe/__init__.py +1 -1
- quantprobe-1.6.1/quantprobe/__main__.py +9 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe/auto.py +35 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe/cli.py +4 -2
- {quantprobe-1.5.2 → quantprobe-1.6.1/quantprobe.egg-info}/PKG-INFO +1 -1
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe.egg-info/SOURCES.txt +1 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/LICENSE +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/README.md +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe/dashboard.py +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe/detect.py +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe/fetch.py +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe/optimize.py +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe/plan.py +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe/probe.py +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe/runtime.py +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe/spec.py +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe/target.py +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe.egg-info/dependency_links.txt +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe.egg-info/entry_points.txt +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe.egg-info/requires.txt +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/quantprobe.egg-info/top_level.txt +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/setup.cfg +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/tests/test_engine.py +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/tests/test_evaluator.py +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/tests/test_pipeline.py +0 -0
- {quantprobe-1.5.2 → quantprobe-1.6.1}/tests/test_transforms.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: quantprobe
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.6.1
|
|
4
4
|
Summary: Probe-then-quantize for LLMs: measure a model's fragility curve, plan bit/tier placement by the tiered decode law, and emit ready-to-run llama.cpp recipes.
|
|
5
5
|
Author: Federico Sciuca
|
|
6
6
|
License: MIT
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "quantprobe"
|
|
7
|
-
version = "1.
|
|
7
|
+
version = "1.6.1"
|
|
8
8
|
description = "Probe-then-quantize for LLMs: measure a model's fragility curve, plan bit/tier placement by the tiered decode law, and emit ready-to-run llama.cpp recipes."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -8,4 +8,4 @@ Three commands, all grounded in measured laws (see LAWS.md in the repo):
|
|
|
8
8
|
Every constant in `plan` is fitted from measurements published in the repo, including two
|
|
9
9
|
pre-registered hardware predictions confirmed within 8%.
|
|
10
10
|
"""
|
|
11
|
-
__version__ = "1.
|
|
11
|
+
__version__ = "1.6.1"
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"""`python -m quantprobe` — identical to the `quantprobe` console script.
|
|
2
|
+
|
|
3
|
+
The PATH-proof entry point: on Windows, `pip install` often lands the .exe in a
|
|
4
|
+
user-site Scripts folder that is not on PATH; this always works regardless.
|
|
5
|
+
"""
|
|
6
|
+
from .cli import main
|
|
7
|
+
|
|
8
|
+
if __name__ == "__main__":
|
|
9
|
+
main()
|
|
@@ -68,7 +68,36 @@ def pick_source(files, t):
|
|
|
68
68
|
return hi[0] if hi else max(cands)
|
|
69
69
|
|
|
70
70
|
|
|
71
|
+
def _wizard(a):
|
|
72
|
+
"""No model given: detect, ask two questions, go. The full pipeline with zero flags."""
|
|
73
|
+
print("quantprobe auto - interactive (no flags needed; `quantprobe auto --help` for the full list)")
|
|
74
|
+
try:
|
|
75
|
+
from . import detect as detmod
|
|
76
|
+
d, _ = detmod.detect()
|
|
77
|
+
print(f"\n this machine [auto-detected]: {d['vram']:g} GB VRAM @ {d['vram_bw']:g} GB/s | "
|
|
78
|
+
f"{d['ram']:g} GB RAM @ {d['ram_bw']:g} GB/s | disk {d['disk_bw']:g} GB/s")
|
|
79
|
+
except Exception:
|
|
80
|
+
pass
|
|
81
|
+
try:
|
|
82
|
+
m = input(f"\n model - preset ({', '.join(MODEL_REPOS)}) or HF GGUF repo id [qwen3-30b]: ").strip() or "qwen3-30b"
|
|
83
|
+
print("\n [1] best standard quant for this machine, ready to run (skips quantization)")
|
|
84
|
+
print(" [2] full custom: probe YOUR model's fragile layers (~30-60 min), build its personalized GGUF")
|
|
85
|
+
print(" [3] hit a speed target (asks for tok/s)")
|
|
86
|
+
c = input(" choice [1]: ").strip() or "1"
|
|
87
|
+
if c == "2":
|
|
88
|
+
a.custom = True
|
|
89
|
+
elif c == "3":
|
|
90
|
+
a.tps = float(input(" target tok/s: ").strip())
|
|
91
|
+
r = input(" launch chat when ready? [Y/n]: ").strip().lower()
|
|
92
|
+
a.run = r != "n"
|
|
93
|
+
except EOFError:
|
|
94
|
+
raise SystemExit("no model given and no terminal to ask. Pass one: quantprobe auto qwen3-30b [--custom] [--run]")
|
|
95
|
+
a.target = m
|
|
96
|
+
|
|
97
|
+
|
|
71
98
|
def run(a):
|
|
99
|
+
if a.target is None:
|
|
100
|
+
_wizard(a)
|
|
72
101
|
target = a.target
|
|
73
102
|
if target in MODEL_REPOS:
|
|
74
103
|
repo, t, ac, ne, moe = MODEL_REPOS[target]
|
|
@@ -111,6 +140,12 @@ def run(a):
|
|
|
111
140
|
scored.sort()
|
|
112
141
|
_, _, path, size, bits, best = scored[0]
|
|
113
142
|
|
|
143
|
+
if getattr(a, "custom", False) and want_bits >= 3.5 and not getattr(a, "force_custom", False):
|
|
144
|
+
print(f"\n[quantprobe auto --custom] this machine doesn't need the surgery: the optimizer")
|
|
145
|
+
print(f" wants ~{want_bits:g}-bit here, and at >=3.5 bits standard community quants match the")
|
|
146
|
+
print(f" depth-aware recipe on quality - the fragile-band fix only pays below ~3 bits (Laws 1-2).")
|
|
147
|
+
print(f" Fetching the optimal standard quant instead. Build anyway: --force-custom.")
|
|
148
|
+
a.custom = False
|
|
114
149
|
if getattr(a, "custom", False):
|
|
115
150
|
src = pick_source(files, t)
|
|
116
151
|
if not src:
|
|
@@ -92,14 +92,16 @@ def main():
|
|
|
92
92
|
hwargs(o)
|
|
93
93
|
|
|
94
94
|
au = sub.add_parser("auto", help="ONE command: model in, running setup out - optimizer picks the bits, the closest quant is fetched, run command printed")
|
|
95
|
-
au.add_argument("target",
|
|
95
|
+
au.add_argument("target", nargs="?", default=None,
|
|
96
|
+
help="model preset (qwen3-30b, qwen3-coder, glm-air, laguna-s, gemma-12b, mistral-7b) or a HF GGUF repo id; omit it and quantprobe ASKS (interactive)")
|
|
96
97
|
au.add_argument("--dir", default="./models", help="download directory (default ./models)")
|
|
97
98
|
au.add_argument("--run", action="store_true", help="launch chat immediately after the download")
|
|
98
99
|
hwargs(au)
|
|
99
100
|
au.add_argument("--tps", type=float, default=None, help="target tok/s for the optimizer")
|
|
100
101
|
au.add_argument("--max-quality", type=float, default=None)
|
|
101
102
|
au.add_argument("--allow-prune", action="store_true"); au.add_argument("--any-runtime", action="store_true")
|
|
102
|
-
au.add_argument("--custom", action="store_true", help="THE PRODUCT: fetch a high-precision source, probe YOUR model (~30-60 min), build a depth-aware GGUF personalized to it")
|
|
103
|
+
au.add_argument("--custom", action="store_true", help="THE PRODUCT: fetch a high-precision source, probe YOUR model (~30-60 min), build a depth-aware GGUF personalized to it (machine-gated: skipped with an explanation when this box doesn't need sub-3-bit surgery)")
|
|
104
|
+
au.add_argument("--force-custom", action="store_true", help="build the depth-aware GGUF even when the optimizer says this machine doesn't need it")
|
|
103
105
|
au.add_argument("--serve", action="store_true", help="with --run: llama-server instead of chat")
|
|
104
106
|
au.add_argument("--extra", default=None)
|
|
105
107
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: quantprobe
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.6.1
|
|
4
4
|
Summary: Probe-then-quantize for LLMs: measure a model's fragility curve, plan bit/tier placement by the tiered decode law, and emit ready-to-run llama.cpp recipes.
|
|
5
5
|
Author: Federico Sciuca
|
|
6
6
|
License: MIT
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|