diff --git a/pyproject.toml b/pyproject.toml index 930a813..d86902f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,7 @@ bench = [ ] [tool.setuptools.packages.find] -include = ["turboquant*"] +include = ["turboquant*", "refract*"] [build-system] requires = ["setuptools>=68"] diff --git a/turboquant/refract/README.md b/refract/README.md similarity index 96% rename from turboquant/refract/README.md rename to refract/README.md index a063876..c21228f 100644 --- a/turboquant/refract/README.md +++ b/refract/README.md @@ -55,11 +55,11 @@ export LLAMA_CPP_BIN_DIR=/path/to/llama.cpp/build/bin ## Quickstart ```bash -python3 -m turboquant.refract.cli score \ +python3 -m refract.cli score \ --model ~/local_llms/models/Qwen2.5-7B-Instruct-Q8_0.gguf \ --reference 'ctk=f16,ctv=f16' \ --candidate 'ctk=q8_0,ctv=turbo4,attn_rot_v=0' \ - --prompts turboquant/refract/prompts/v0.1.jsonl \ + --prompts refract/prompts/v0.1.jsonl \ --corpus ~/local_llms/llama.cpp/wikitext-2-raw/wiki.test.raw \ --chunks 32 -c 512 -ngl 99 \ --measure-floor \ @@ -143,17 +143,17 @@ It is marked `integration` because it spawns llama.cpp many times against a ```bash # Mark it in pytest.ini if not already: # markers = integration: marks tests requiring llama.cpp + a real GGUF -pytest -m integration turboquant/refract/tests/test_validation.py -s +pytest -m integration refract/tests/test_validation.py -s ``` Or directly via CLI: ```bash -python3 -m turboquant.refract.cli score \ +python3 -m refract.cli score \ --model ~/local_llms/models/gemma-4-26B-A4B-Q8_0.gguf \ --reference 'ctk=f16,ctv=f16' \ --candidate 'ctk=q8_0,ctv=turbo4,attn_rot_v=0,attn_rot_k=0' \ - --prompts turboquant/refract/prompts/v0.1.jsonl \ + --prompts refract/prompts/v0.1.jsonl \ --corpus ~/local_llms/llama.cpp/wikitext-2-raw/wiki.test.raw \ --chunks 32 --measure-floor ``` @@ -163,7 +163,7 @@ Fast unit tests (no subprocess) live in `tests/test_unit.py`. ## File layout ``` -turboquant/refract/ +refract/ __init__.py cli.py # CLI entry point score.py # composite + bands + floor logic diff --git a/turboquant/refract/__init__.py b/refract/__init__.py similarity index 93% rename from turboquant/refract/__init__.py rename to refract/__init__.py index 1d0b911..bf564fe 100644 --- a/turboquant/refract/__init__.py +++ b/refract/__init__.py @@ -9,7 +9,7 @@ quantization quality. Replaces "lower PPL = better" with a composite of: (v0.1 uses corpus KLD via llama-perplexity as a proxy for trajectory KLD). See: - - turboquant/refract/README.md for usage. + - refract/README.md for usage. - docs/papers/attn-rotation-and-ppl-artifact.md for the motivating paper. """ diff --git a/turboquant/refract/axes/__init__.py b/refract/axes/__init__.py similarity index 100% rename from turboquant/refract/axes/__init__.py rename to refract/axes/__init__.py diff --git a/turboquant/refract/axes/gtm.py b/refract/axes/gtm.py similarity index 100% rename from turboquant/refract/axes/gtm.py rename to refract/axes/gtm.py diff --git a/turboquant/refract/axes/kld.py b/refract/axes/kld.py similarity index 100% rename from turboquant/refract/axes/kld.py rename to refract/axes/kld.py diff --git a/turboquant/refract/cli.py b/refract/cli.py similarity index 98% rename from turboquant/refract/cli.py rename to refract/cli.py index dcefd13..285d1be 100644 --- a/turboquant/refract/cli.py +++ b/refract/cli.py @@ -1,11 +1,11 @@ """REFRACT v0.1 CLI. Usage: - python3 -m turboquant.refract.cli score \\ + python3 -m refract.cli score \\ --model MODEL.gguf \\ --reference "ctk=f16,ctv=f16" \\ --candidate "ctk=q8_0,ctv=turbo4,attn_rot_v=0" \\ - --prompts turboquant/refract/prompts/v0.1.jsonl \\ + --prompts refract/prompts/v0.1.jsonl \\ --corpus ~/local_llms/llama.cpp/wikitext-2-raw/wiki.test.raw \\ --chunks 32 -c 512 -ngl 99 """ diff --git a/turboquant/refract/prompts/v0.1.jsonl b/refract/prompts/v0.1.jsonl similarity index 100% rename from turboquant/refract/prompts/v0.1.jsonl rename to refract/prompts/v0.1.jsonl diff --git a/turboquant/refract/report.py b/refract/report.py similarity index 100% rename from turboquant/refract/report.py rename to refract/report.py diff --git a/turboquant/refract/runner.py b/refract/runner.py similarity index 100% rename from turboquant/refract/runner.py rename to refract/runner.py diff --git a/turboquant/refract/score.py b/refract/score.py similarity index 100% rename from turboquant/refract/score.py rename to refract/score.py diff --git a/turboquant/refract/tests/__init__.py b/refract/tests/__init__.py similarity index 100% rename from turboquant/refract/tests/__init__.py rename to refract/tests/__init__.py diff --git a/turboquant/refract/tests/conftest.py b/refract/tests/conftest.py similarity index 100% rename from turboquant/refract/tests/conftest.py rename to refract/tests/conftest.py diff --git a/turboquant/refract/tests/test_unit.py b/refract/tests/test_unit.py similarity index 92% rename from turboquant/refract/tests/test_unit.py rename to refract/tests/test_unit.py index 90307a5..e96985d 100644 --- a/turboquant/refract/tests/test_unit.py +++ b/refract/tests/test_unit.py @@ -1,7 +1,7 @@ """Fast unit tests for REFRACT scoring math + parsers. No subprocess. Run with: - pytest turboquant/refract/tests/test_unit.py + pytest refract/tests/test_unit.py """ from __future__ import annotations @@ -10,10 +10,10 @@ import math import pytest -from turboquant.refract.axes.gtm import _diff, _tokenize_words -from turboquant.refract.axes.kld import _kld_to_score -from turboquant.refract.runner import KVConfig -from turboquant.refract.score import ( +from refract.axes.gtm import _diff, _tokenize_words +from refract.axes.kld import _kld_to_score +from refract.runner import KVConfig +from refract.score import ( MIN_FLOOR, band, composite_score, diff --git a/turboquant/refract/tests/test_validation.py b/refract/tests/test_validation.py similarity index 92% rename from turboquant/refract/tests/test_validation.py rename to refract/tests/test_validation.py index 1611743..2fee074 100644 --- a/turboquant/refract/tests/test_validation.py +++ b/refract/tests/test_validation.py @@ -20,15 +20,15 @@ must NOT mistake that for a pass. This test is integration-only: it spawns llama-cli + llama-perplexity many times against a 26B-A4B model and takes 30+ minutes. Run with: - pytest -m integration turboquant/refract/tests/test_validation.py + pytest -m integration refract/tests/test_validation.py or directly: - python3 -m turboquant.refract.cli score \\ + python3 -m refract.cli score \\ --model ~/local_llms/models/gemma-4-26B-A4B-Q8_0.gguf \\ --reference 'ctk=f16,ctv=f16' \\ --candidate 'ctk=q8_0,ctv=turbo4,attn_rot_v=0,attn_rot_k=0' \\ - --prompts turboquant/refract/prompts/v0.1.jsonl \\ + --prompts refract/prompts/v0.1.jsonl \\ --corpus ~/local_llms/llama.cpp/wikitext-2-raw/wiki.test.raw \\ --chunks 32 --measure-floor """ @@ -40,10 +40,10 @@ from pathlib import Path import pytest -from turboquant.refract.axes.gtm import run_gtm -from turboquant.refract.axes.kld import run_kld -from turboquant.refract.runner import KVConfig -from turboquant.refract.score import composite_score +from refract.axes.gtm import run_gtm +from refract.axes.kld import run_kld +from refract.runner import KVConfig +from refract.score import composite_score # Default paths; override via env if your model lives elsewhere.