Text Generation
Safetensors
GGUF
English
Chinese
qwen2
reasoning-compression
cjk
chain-of-thought
distillation
qwen2.5
conversational
Instructions to use ZelligeAI/tessera-compressor with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- llama-cpp-python
How to use ZelligeAI/tessera-compressor with llama-cpp-python:
# !pip install llama-cpp-python from llama_cpp import Llama llm = Llama.from_pretrained( repo_id="ZelligeAI/tessera-compressor", filename="gguf/compressor-v31-q8_0.gguf", )
llm.create_chat_completion( messages = [ { "role": "user", "content": "What is the capital of France?" } ] ) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use ZelligeAI/tessera-compressor with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf ZelligeAI/tessera-compressor:Q8_0 # Run inference directly in the terminal: llama cli -hf ZelligeAI/tessera-compressor:Q8_0
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf ZelligeAI/tessera-compressor:Q8_0 # Run inference directly in the terminal: llama cli -hf ZelligeAI/tessera-compressor:Q8_0
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf ZelligeAI/tessera-compressor:Q8_0 # Run inference directly in the terminal: ./llama-cli -hf ZelligeAI/tessera-compressor:Q8_0
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf ZelligeAI/tessera-compressor:Q8_0 # Run inference directly in the terminal: ./build/bin/llama-cli -hf ZelligeAI/tessera-compressor:Q8_0
Use Docker
docker model run hf.co/ZelligeAI/tessera-compressor:Q8_0
- LM Studio
- Jan
- vLLM
How to use ZelligeAI/tessera-compressor with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "ZelligeAI/tessera-compressor" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "ZelligeAI/tessera-compressor", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/ZelligeAI/tessera-compressor:Q8_0
- Ollama
How to use ZelligeAI/tessera-compressor with Ollama:
ollama run hf.co/ZelligeAI/tessera-compressor:Q8_0
- Unsloth Studio
How to use ZelligeAI/tessera-compressor with Unsloth Studio:
Install Unsloth Studio (macOS, Linux, WSL)
curl -fsSL https://unsloth.ai/install.sh | sh # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for ZelligeAI/tessera-compressor to start chatting
Install Unsloth Studio (Windows)
irm https://unsloth.ai/install.ps1 | iex # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for ZelligeAI/tessera-compressor to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for ZelligeAI/tessera-compressor to start chatting
- Pi
How to use ZelligeAI/tessera-compressor with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf ZelligeAI/tessera-compressor:Q8_0
Configure the model in Pi
# Install Pi: npm install -g @mariozechner/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "ZelligeAI/tessera-compressor:Q8_0" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent new
How to use ZelligeAI/tessera-compressor with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf ZelligeAI/tessera-compressor:Q8_0
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default ZelligeAI/tessera-compressor:Q8_0
Run Hermes
hermes
- Atomic Chat new
- OpenClaw new
How to use ZelligeAI/tessera-compressor with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf ZelligeAI/tessera-compressor:Q8_0
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "ZelligeAI/tessera-compressor:Q8_0" \ --custom-provider-id llama-cpp \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
- Docker Model Runner
How to use ZelligeAI/tessera-compressor with Docker Model Runner:
docker model run hf.co/ZelligeAI/tessera-compressor:Q8_0
- Lemonade
How to use ZelligeAI/tessera-compressor with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull ZelligeAI/tessera-compressor:Q8_0
Run and chat with the model
lemonade run user.tessera-compressor-Q8_0
List all available models
lemonade list
| license: apache-2.0 | |
| base_model: Qwen/Qwen2.5-Coder-1.5B-Instruct | |
| language: | |
| - en | |
| - zh | |
| pipeline_tag: text-generation | |
| tags: | |
| - reasoning-compression | |
| - cjk | |
| - chain-of-thought | |
| - distillation | |
| - qwen2.5 | |
|  | |
| # tessera-compressor | |
| A 1.5B model that compresses English reasoning text into a telegraphic CJK/symbol register under deterministic fidelity gates. It minted the training data for [Tessera-Preview-9B](https://huggingface.co/ZelligeAI/tessera-preview-9b) and replaces the frontier-model teacher that originally produced the register: English reasoning text becomes compressed-register training data at local-inference cost, with no API key and no external dependency. Validation covered code-centric reasoning (103 held-out mixed blocks); behavior on distant domains is unmeasured. | |
| **Paper:** [Tessera-Preview-9B: Compressed Reasoning at 18x Fewer Tokens, and What It Costs](https://zellige.ai/research/compressed-cjk-reasoning) — section 3.1 covers this compressor's design and acceptance record. | |
| Example (real training pair, 85 to 49 tokens): | |
| ```text | |
| EN : So the classes are: - Integer (line 32) - Boolean (line 262) - BitString (line 341) | |
| - OctetString (line 693) ... Let me look at the base class to see if it defines __mul__: | |
| CJK: Integer(line32),Boolean(line262),BitString(line341),OctetString(line693). 查基类是否定义__mul__: | |
| ``` | |
| ## How it works | |
| The compressor operates on passages, not whole blocks. A reasoning block is segmented (code fences stay atomic), sentences are grouped into step-sized passages, each passage is classified as fact-dense or narrative, and the model compresses it against the tail of the chain built so far. Every model output then passes a deterministic gate: the passage's novel numbers and identifiers must survive as substrings, the output must not blow up in length, and it must not exceed a rules-only compression of the same passage in token count. A passage that fails any check falls back to the rules-only version, so a bad generation costs savings rather than gated content. The gate is lexical, not semantic: it prevents the loss of numbers and identifiers, and a judged semantic-equivalence check backed it at acceptance (below), but it does not by itself guarantee semantic preservation on arbitrary input. | |
| ## Acceptance record | |
| Measured on 103 held-out reasoning blocks the model never trained on, under criteria fixed before evaluation: | |
| | Criterion | Result | | |
| | --- | --- | | |
| | Per-passage fidelity gate (numbers and identifiers survive) | 99.0% | | |
| | Median per-passage compression ratio (output/input tokens) | 0.716 | | |
| | CJK adoption | 98.9% of compressed passages | | |
| | Judged semantic equivalence | 103/103 blocks (teacher references on the same blocks: 97.1%) | | |
| | Degenerate outputs | 0 | | |
| | Net corpus savings (after 24% rules-only fallback) | 30.4% | | |
| On whole thinks in downstream production use (45,202 pairs), the compressed rendering costs a median 0.58x the tokens of its English source. | |
| ## Files | |
| - Root: merged model, standard Hugging Face format (bf16). Base: Qwen2.5-Coder-1.5B-Instruct, LoRA r=16 merged in. | |
| - `gguf/compressor-v31-q8_0.gguf`: llama.cpp quantization, validated behaviorally (scores 4/4 on the same acceptance suite). q4_k_m showed visible drift and is not published. | |
| - `scripts/`: the complete usage harness. No tokens or keys required anywhere. | |
| ## Usage | |
| Serve the model behind any OpenAI-compatible endpoint: | |
| ```bash | |
| vllm serve ZelligeAI/tessera-compressor --port 8001 | |
| # or, CPU-friendly: | |
| llama-server -m gguf/compressor-v31-q8_0.gguf --port 8001 | |
| ``` | |
| Then run the harness: | |
| ```bash | |
| cd scripts && pip install -r requirements.txt | |
| # compress one reasoning block from a text file | |
| python compress.py --in think.txt --endpoint http://localhost:8001/v1 | |
| # compress a corpus: {"id": ..., "text": ...} per JSONL line | |
| python compress.py --in blocks.jsonl --out compressed.jsonl \ | |
| --endpoint http://localhost:8001/v1 | |
| ``` | |
| Output records carry the compressed text, source and output token counts, and per-block harness stats (model-accepted vs rules-fallback passage counts). | |
| `scripts/` contents: | |
| - `compress.py`: the driver. Segment, classify, compress per passage with chain context, gate, fall back on failure. | |
| - `segmenting.py`: segmentation, passage grouping, fact extraction, classification, and the fidelity gate. Pure text processing. | |
| - `tokenmax.py`: deterministic token-saving substitutions, used as the rules-only fallback and as a post-processor. | |
| One note on token counting: the gate compares token counts under a tokenizer you choose (`--tokenizer`, default this repo). To reproduce the acceptance harness exactly, point it at the tokenizer of the model you are minting data for (the acceptance run used the Qwen3.5 target tokenizer). | |
| Throughput on the acceptance hardware was 19.6K blocks/hour on one GPU, which makes minting compressed data cheap at any corpus size. | |
| ## License | |
| Apache-2.0, same as the base model. | |