Instructions to use Sparset/thinklite-27B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Sparset/thinklite-27B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="Sparset/thinklite-27B") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("Sparset/thinklite-27B") model = AutoModelForMultimodalLM.from_pretrained("Sparset/thinklite-27B", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use Sparset/thinklite-27B 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 Sparset/thinklite-27B:Q4_K_M # Run inference directly in the terminal: llama cli -hf Sparset/thinklite-27B:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf Sparset/thinklite-27B:Q4_K_M # Run inference directly in the terminal: llama cli -hf Sparset/thinklite-27B:Q4_K_M
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 Sparset/thinklite-27B:Q4_K_M # Run inference directly in the terminal: ./llama-cli -hf Sparset/thinklite-27B:Q4_K_M
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 Sparset/thinklite-27B:Q4_K_M # Run inference directly in the terminal: ./build/bin/llama-cli -hf Sparset/thinklite-27B:Q4_K_M
Use Docker
docker model run hf.co/Sparset/thinklite-27B:Q4_K_M
- LM Studio
- Jan
- vLLM
How to use Sparset/thinklite-27B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Sparset/thinklite-27B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Sparset/thinklite-27B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/Sparset/thinklite-27B:Q4_K_M
- SGLang
How to use Sparset/thinklite-27B with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "Sparset/thinklite-27B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Sparset/thinklite-27B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "Sparset/thinklite-27B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Sparset/thinklite-27B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Ollama
How to use Sparset/thinklite-27B with Ollama:
ollama run hf.co/Sparset/thinklite-27B:Q4_K_M
- Unsloth Desktop
- Pi
How to use Sparset/thinklite-27B with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf Sparset/thinklite-27B:Q4_K_M
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "Sparset/thinklite-27B:Q4_K_M" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use Sparset/thinklite-27B with Docker Model Runner:
docker model run hf.co/Sparset/thinklite-27B:Q4_K_M
- Lemonade
How to use Sparset/thinklite-27B with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull Sparset/thinklite-27B:Q4_K_M
Run and chat with the model
lemonade run user.thinklite-27B-Q4_K_M
List all available models
lemonade list
- Hermes Agent
How to use Sparset/thinklite-27B with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf Sparset/thinklite-27B:Q4_K_M
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 Sparset/thinklite-27B:Q4_K_M
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use Sparset/thinklite-27B with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf Sparset/thinklite-27B:Q4_K_M
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 "Sparset/thinklite-27B:Q4_K_M" \ --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"
Thinklite-27B
Qwen3.8-27B that thinks with fewer tokens. Thinklite-27B is trained to drop the parts of its reasoning that do not help it reach the answer: restating the question, repeating a step it already did, re-checking a result that was already checked, and exploring approaches it then abandons. Answers arrive sooner, with the same model, the same chat template and the same hardware cost per token.
| Version | Reasoning tokens (avg per benchmark) | All output tokens | Time to full answer (TTFA) |
|---|---|---|---|
| Thinklite-27B Low | 20% fewer | 14% fewer | 12% faster |
| Thinklite-27B High | 28% fewer | 20% fewer | 22% faster |
| Thinklite-27B Max | 40% fewer | 33% fewer | 43% faster |
Measured on six benchmarks at reasoning_effort=low against Qwen3.8-27B at the same setting (details below).
- Reasoning tokens: the thinking part only; the change is averaged over the six benchmarks.
- All output tokens: thinking plus answer, summed over all 4,291 requests.
- TTFA: the time a single user waits for the complete answer, averaged over the six benchmarks. Thinklite-27B decodes at exactly the base model's speed, so the whole speedup comes from writing fewer tokens.
Versions
All three versions are full models (merged bf16 weights, drop-in replacements for Qwen3.8-27B) in this repository:
| Version | Branch | What it is | Choose it for |
|---|---|---|---|
| Thinklite-27B High | main |
Trained on the full dataset; the weights keep the largest 25% of each layer's fine-tuning changes, applied at 0.7x | the balance of savings and accuracy |
| Thinklite-27B Low | low |
Trained on a smaller dataset, merged the same way as High | the closest accuracy to the base model |
| Thinklite-27B Max | max |
Trained on the full dataset, with the full fine-tuning applied | the largest token savings |
"Low", "High" and "Max" name the versions, not reasoning settings: every version supports reasoning_effort low,
medium and xhigh, exactly like Qwen3.8-27B. A Q4_K_M GGUF of Thinklite-27B High is on main; the LoRA adapters are
on the adapters branch.
How to get each version
Each version lives on its own branch of this repository: main is High (the default), low is Low, max is Max.
Pick the branch (Hugging Face calls it a revision) wherever you load the model:
On the website: open the Files and versions tab and switch the branch menu (it shows
main) tolowormax.Download with the CLI:
hf download Sparset/thinklite-27B --revision low --local-dir Thinklite-27B-Low hf download Sparset/thinklite-27B --revision max --local-dir Thinklite-27B-Max hf download Sparset/thinklite-27B --local-dir Thinklite-27B-High # mainPython:
snapshot_download("Sparset/thinklite-27B", revision="low"), or passrevision="low"/revision="max"to anyfrom_pretrained(...)call.vLLM: add
--revision lowor--revision maxtovllm serve(examples under Usage).Git:
git clone -b low https://huggingface.co/Sparset/thinklite-27B(requiresgit lfs).
Without a revision you always get main, which is Thinklite-27B High.
Objective
Reasoning models spend much of their output on thinking that does not change the answer. The goal of Thinklite is to remove that overhead without teaching the model new behaviour: every training target is the model's own reasoning, shortened only by deleting redundant parts, so the model learns to reach the same answers by a shorter route rather than imitating a different model's style. Reasoning that is genuinely needed, for example on hard problems, is kept.
Method
1. Self-generated, verified answers. Qwen3.8-27B answered a broad prompt set covering math, code, structured output (JSON / YAML / TOML / tool calls), instruction following, science, tool use, grounded question answering and multi-turn conversations. Only answers verified as correct were kept: exact checkers for math, executed unit tests for code, schema and parser checks for structured output, rule checks for instructions, and an answer-only judge for open-ended questions.
2. Trimming and deletion-only editing. Each correct reasoning trace was split into units.
- Everything after the point where the model had committed to its final answer was cut.
- Redundant units were deleted: restatements of the prompt, repeated steps, redundant checks, abandoned detours and filler. Nothing was rewritten, paraphrased or added.
- Every edit had to pass mechanical checks: the final answer is unchanged, every value the answer uses is still derived, and no dependency is broken.
- A continuation test let the model continue from the shortened reasoning and required it to still solve the task.
- Traces from the model's high-effort mode were kept at full length as anchors, so its
xhighbehaviour is preserved.
3. Training: SFT + DPO with LoRA and quantization-aware training.
- LoRA (rank 32, alpha 64) on all attention, MLP and linear-attention projections.
- The objective is DPO (beta 0.1) plus a supervised term on the preferred answer. The shortened trace is preferred over the original; rows without a shorter variant are supervised directly.
- Quantization-aware training: during training the frozen base layers ran fake-quantized to int4 (group size 32), so the learned changes hold up when the model is quantized, as in the GGUF.
- Learning rate 5e-5. The full dataset is 1,370 rows (1 epoch); Thinklite-27B Low was trained on a smaller set of 474 rows (2 epochs).
4. Update-selective merge (High and Low). Instead of adding the whole LoRA update to the base weights, each weight matrix keeps only the largest 25% (by magnitude) of its fine-tuning changes, and those are applied at 0.7x (DLER). The model keeps most of the efficiency gain while staying closer to the base model on hard problems. Thinklite-27B Max applies the full update.
Benchmarks
Setup:
One frozen suite: identical prompts, chat template, token caps and scoring for every model.
vLLM 0.30.0, bf16 weights, FP8 KV cache, Qwen3.8's thinking-mode sampling, 64 concurrent requests.
One NVIDIA RTX PRO 6000 Blackwell (96 GB).
All rows use
reasoning_effort=lowexcept the reference "Qwen3.8-27B (xhigh)" column.Answers that hit their cap were rerun once with a 131,072-token cap. Truncated or unparseable answers count as incorrect.
GSM8K: 1,319 problems
AIME 2025: 30 problems x 2 samples, avg@2
MMLU-Pro: 1,000-question stratified subset
IFEval: 541 prompts, prompt-level strict
LiveCodeBench v6: 131 problems (2025-02 to 2025-04), pass@1
BFCL: 1,240 non-live function-calling cases (BFCL v3 categories, official AST checker)
Accuracy (%)
| Benchmark | Qwen3.8-27B (xhigh) | Qwen3.8-27B (low) | Thinklite-27B Low | Thinklite-27B High | Thinklite-27B Max |
|---|---|---|---|---|---|
| GSM8K | 97.2 | 97.4 | 96.9 | 97.3 | 96.7 |
| AIME 2025 | 93.3 | 90.0 | 88.3 | 78.3 | 65.0 |
| MMLU-Pro | 86.3 | 84.4 | 84.7 | 84.7 | 82.6 |
| IFEval | 91.1 | 86.3 | 84.3 | 83.9 | 83.0 |
| LiveCodeBench v6 | 84.0 | 71.8 | 72.5 | 67.2 | 61.8 |
| BFCL | 88.7 | 90.8 | 90.4 | 90.4 | 90.2 |
| Average | 86.8 | 86.2 | 83.6 | 79.9 |
Reasoning tokens per answer (mean; change vs Qwen3.8-27B at low)
| Benchmark | Qwen3.8-27B (low) | Thinklite-27B Low | Thinklite-27B High | Thinklite-27B Max |
|---|---|---|---|---|
| GSM8K | 183 | 163 (-11%) | 147 (-20%) | 124 (-32%) |
| AIME 2025 | 12,125 | 8,374 (-31%) | 8,618 (-29%) | 7,867 (-35%) |
| MMLU-Pro | 1,103 | 934 (-15%) | 748 (-32%) | 554 (-50%) |
| IFEval | 659 | 464 (-30%) | 416 (-37%) | 326 (-51%) |
| LiveCodeBench v6 | 10,741 | 9,152 (-15%) | 7,581 (-29%) | 5,639 (-48%) |
| BFCL | 96 | 80 (-17%) | 76 (-21%) | 70 (-27%) |
| All output tokens, 4,291 requests | 4,915,895 | 4,244,014 (-14%) | 3,915,800 (-20%) | 3,285,976 (-33%) |
Time to full answer, single user (seconds, median / p95; speed-up at the median)
| Benchmark | Qwen3.8-27B (low) | Thinklite-27B Low | Thinklite-27B High | Thinklite-27B Max |
|---|---|---|---|---|
| GSM8K | 11.3 / 23 | 10.4 / 21 (8% faster) | 10.3 / 20 (10% faster) | 9.7 / 17 (16% faster) |
| AIME 2025 | 181.9 / 1612 | 156.9 / 1109 (16% faster) | 147.6 / 1227 (23% faster) | 122.7 / 1163 (48% faster) |
| MMLU-Pro | 28.9 / 169 | 25.4 / 118 (14% faster) | 24.3 / 88 (19% faster) | 20.9 / 68 (38% faster) |
| IFEval | 25.1 / 110 | 19.3 / 85 (30% faster) | 18.9 / 80 (33% faster) | 15.8 / 69 (59% faster) |
| LiveCodeBench v6 | 129.4 / 1764 | 125.0 / 1588 (4% faster) | 89.4 / 1542 (45% faster) | 67.6 / 1323 (91% faster) |
| BFCL | 5.6 / 19 | 5.4 / 17 (4% faster) | 5.4 / 16 (4% faster) | 5.4 / 16 (4% faster) |
TTFA is computed from each answer's length, the prompt prefill time and the single-user decode speed measured on the same GPU (about 28 tokens/s for every model). Thinklite-27B Low was timed in a separate run on the same GPU type; its times are shown relative to the base model timed in that run (same speedup, common base timing).
Usage
vLLM
vllm serve Sparset/thinklite-27B --max-model-len 135168 --kv-cache-dtype fp8 # Thinklite-27B High
vllm serve Sparset/thinklite-27B --revision low --max-model-len 135168 --kv-cache-dtype fp8 # Thinklite-27B Low
vllm serve Sparset/thinklite-27B --revision max --max-model-len 135168 --kv-cache-dtype fp8 # Thinklite-27B Max
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="-")
reply = client.chat.completions.create(
model="Sparset/thinklite-27B",
messages=[{"role": "user", "content": "How many primes are there below 100?"}],
extra_body={"chat_template_kwargs": {"reasoning_effort": "low"}},
)
print(reply.choices[0].message.content)
Transformers
from transformers import AutoModelForImageTextToText, AutoProcessor
model = AutoModelForImageTextToText.from_pretrained("Sparset/thinklite-27B", revision="main", dtype="auto", device_map="auto")
processor = AutoProcessor.from_pretrained("Sparset/thinklite-27B", revision="main")
Use revision="low" or revision="max" for the other versions.
llama.cpp (Thinklite-27B High, GGUF)
llama-server -hf Sparset/thinklite-27B:Q4_K_M --jinja -c 32768 --chat-template-kwargs '{"reasoning_effort": "low"}'
# or with local files:
llama-server -m Thinklite-27B-High-Q4_K_M.gguf --mmproj mmproj-Thinklite-27B-High-F16.gguf --jinja -c 32768
Adapters (adapters branch): the LoRA adapters for the full-dataset training (adapters/full) and the
smaller-dataset training (adapters/small). Loading the full-dataset adapter with PEFT gives Thinklite-27B Max; High
and Low are those adapters with the update-selective merge above, so use the merged weights for them.
Files
main: Thinklite-27B High, merged bf16 safetensors with tokenizer, chat template and processor files; plusThinklite-27B-High-Q4_K_M.ggufandmmproj-Thinklite-27B-High-F16.gguf(the vision projector).low: Thinklite-27B Low, merged bf16 safetensors.max: Thinklite-27B Max, merged bf16 safetensors.adapters: the LoRA adapters.
Limitations
- Evaluated at
reasoning_effort=low. Other effort levels are supported but are not part of the tables above. - The vision encoder is unchanged from Qwen3.8-27B; training data was text only.
- As with any fine-tune, check the model on your own tasks before relying on it.
License
Apache-2.0, the license of the base model Qwen/Qwen3.8-27B.
- Downloads last month
- 64