Spaces:
Sleeping
Sleeping
Download compressor.py from robtacconelli/Nacrith-CPU: direct link, hf CLI and curl.
- Browser
- Download file 1.66 kB
-
https://huggingface.co/spaces/robtacconelli/Nacrith-CPU/resolve/main/compressor.py
- Command line
-
hf download hf://spaces/robtacconelli/Nacrith-CPU/compressor.py
-
curl -L -o compressor.py https://huggingface.co/spaces/robtacconelli/Nacrith-CPU/resolve/main/compressor.py
1.66 kB
| """ | |
| Nacrith CPU compressor -- same interface as the GPU version. | |
| Internally uses trigram tables + arithmetic coding instead of a neural model. | |
| Supports two formats: | |
| TC01 -- lossless text compression (replaces NC01) | |
| NC05 -- hybrid multi-table binary compression (replaces NC02) | |
| """ | |
| from trigram_compressor import TrigramCompressor | |
| # Magic bytes exported for app.py validation | |
| MAGIC = b'TC01' # CPU text format | |
| MAGIC_BIN = b'NC05' # CPU binary format | |
| HEADER_SIZE = 12 # minimum header bytes (magic + 2 x uint32) | |
| class _ModelProxy: | |
| """Exposes tokenizer under comp.model.tokenizer, matching GPU interface.""" | |
| def __init__(self, tokenizer): | |
| self.tokenizer = tokenizer | |
| class NeuralCompressor: | |
| """CPU compressor with the same public API as the GPU NeuralCompressor. | |
| Replaces the SmolLM2-135M neural model with trigram tables for | |
| probability prediction, eliminating the GPU requirement. | |
| """ | |
| def __init__(self, verbose: bool = False): | |
| self._trigram = TrigramCompressor(verbose=verbose) | |
| # Expose tokenizer at comp.model.tokenizer (same as GPU version) | |
| self.model = _ModelProxy(self._trigram.tokenizer) | |
| def compress(self, text: str) -> bytes: | |
| """Compress text string -> TC01 format bytes.""" | |
| return self._trigram.compress(text) | |
| def compress_bytes(self, data: bytes) -> bytes: | |
| """Compress raw bytes -> NC05 hybrid format bytes.""" | |
| return self._trigram.compress_bytes(data) | |
| def decompress(self, data: bytes): | |
| """Decompress TC01 / NC03 / NC05 -> original text str or raw bytes.""" | |
| return self._trigram.decompress(data) | |