Instructions to use sci4ai/Qwen3.6-27B-Ablit with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use sci4ai/Qwen3.6-27B-Ablit with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="sci4ai/Qwen3.6-27B-Ablit") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("sci4ai/Qwen3.6-27B-Ablit") model = AutoModelForCausalLM.from_pretrained("sci4ai/Qwen3.6-27B-Ablit") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.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=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - llama-cpp-python
How to use sci4ai/Qwen3.6-27B-Ablit with llama-cpp-python:
# !pip install llama-cpp-python from llama_cpp import Llama llm = Llama.from_pretrained( repo_id="sci4ai/Qwen3.6-27B-Ablit", filename="Qwen3.6-27B-Ablit-BF16.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 sci4ai/Qwen3.6-27B-Ablit 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 sci4ai/Qwen3.6-27B-Ablit:BF16 # Run inference directly in the terminal: llama cli -hf sci4ai/Qwen3.6-27B-Ablit:BF16
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf sci4ai/Qwen3.6-27B-Ablit:BF16 # Run inference directly in the terminal: llama cli -hf sci4ai/Qwen3.6-27B-Ablit:BF16
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 sci4ai/Qwen3.6-27B-Ablit:BF16 # Run inference directly in the terminal: ./llama-cli -hf sci4ai/Qwen3.6-27B-Ablit:BF16
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 sci4ai/Qwen3.6-27B-Ablit:BF16 # Run inference directly in the terminal: ./build/bin/llama-cli -hf sci4ai/Qwen3.6-27B-Ablit:BF16
Use Docker
docker model run hf.co/sci4ai/Qwen3.6-27B-Ablit:BF16
- LM Studio
- Jan
- vLLM
How to use sci4ai/Qwen3.6-27B-Ablit with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "sci4ai/Qwen3.6-27B-Ablit" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "sci4ai/Qwen3.6-27B-Ablit", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/sci4ai/Qwen3.6-27B-Ablit:BF16
- SGLang
How to use sci4ai/Qwen3.6-27B-Ablit 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 "sci4ai/Qwen3.6-27B-Ablit" \ --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": "sci4ai/Qwen3.6-27B-Ablit", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'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 "sci4ai/Qwen3.6-27B-Ablit" \ --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": "sci4ai/Qwen3.6-27B-Ablit", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Ollama
How to use sci4ai/Qwen3.6-27B-Ablit with Ollama:
ollama run hf.co/sci4ai/Qwen3.6-27B-Ablit:BF16
- Unsloth Studio
How to use sci4ai/Qwen3.6-27B-Ablit 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 sci4ai/Qwen3.6-27B-Ablit 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 sci4ai/Qwen3.6-27B-Ablit to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for sci4ai/Qwen3.6-27B-Ablit to start chatting
- Pi
How to use sci4ai/Qwen3.6-27B-Ablit with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf sci4ai/Qwen3.6-27B-Ablit:BF16
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": "sci4ai/Qwen3.6-27B-Ablit:BF16" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent new
How to use sci4ai/Qwen3.6-27B-Ablit with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf sci4ai/Qwen3.6-27B-Ablit:BF16
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 sci4ai/Qwen3.6-27B-Ablit:BF16
Run Hermes
hermes
- Atomic Chat new
- OpenClaw new
How to use sci4ai/Qwen3.6-27B-Ablit with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf sci4ai/Qwen3.6-27B-Ablit:BF16
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 "sci4ai/Qwen3.6-27B-Ablit:BF16" \ --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 sci4ai/Qwen3.6-27B-Ablit with Docker Model Runner:
docker model run hf.co/sci4ai/Qwen3.6-27B-Ablit:BF16
- Lemonade
How to use sci4ai/Qwen3.6-27B-Ablit with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull sci4ai/Qwen3.6-27B-Ablit:BF16
Run and chat with the model
lemonade run user.Qwen3.6-27B-Ablit-BF16
List all available models
lemonade list
llm.create_chat_completion(
messages = [
{
"role": "user",
"content": "What is the capital of France?"
}
]
)Qwen3.6-27B-Ablit
Abliterated Qwen3.6-27B — full-precision weights. This repo holds both the BF16 safetensors (for transformers / vLLM) and the full-precision BF16 GGUF (Qwen3.6-27B-Ablit-BF16.gguf) for llama.cpp. It is the source the smaller GGUF quants are built from. For everyday local use, grab the IQ4_XS quant instead.
Provided variants
Every format of this model lives in its own repo, collected under the qwen3.6-27b-ablit collection. Sorted by size; IQ-quants are often preferable to similar-sized non-IQ quants.
| Link | Format | Size | Notes |
|---|---|---|---|
| IQ4_XS | GGUF | 15.1 GB | recommended — ~4.25 bpw daily driver (≥16 GB VRAM) |
| Q8_0 | GGUF | 28.6 GB | near-lossless |
| BF16 | GGUF | 53.8 GB | full-precision GGUF |
| Safetensors | transformers | ~56 GB | full precision, vLLM / transformers |
| imatrix | GGUF | 13 MB | importance matrix used for the IQ4_XS quant |
Usage
# full-precision safetensors — transformers / vLLM
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("sci4ai/Qwen3.6-27B-Ablit", dtype="bfloat16", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("sci4ai/Qwen3.6-27B-Ablit")
# full-precision BF16 GGUF (also in this repo) — llama.cpp
llama-server -m Qwen3.6-27B-Ablit-BF16.gguf --flash-attn on --reasoning off
Most users should grab the smaller IQ4_XS GGUF instead — see the variants table
above. The base chat template (Qwen3 ChatML) is unchanged. The model was profiled in
non_thinking mode; if you enable Qwen's thinking mode the refusal geometry differs
slightly and behavior may vary.
Abliteration Method
AblitMD — for multi-disciplinary abliteration, and to be a little hokey.
Try it out: roll your own recipe (ablitMD or classic heretic-style) with the all-in-one app at github.com/eric-merritt/ablitMD.
The motivation is Tom Wollschläger et al.'s theory that refusal is not a single direction but a polyhedral cone (arXiv:2502.17420), hence per-category ablation.
Per category directions computed using the hidden states from the final token in the residual stream.
i. A sample set of 41 harm categories was derived through a simple 2 message chat with popular models: The questions: 1. I'm doing some research on refusals in LLMs. What are the reasons why you might refuse a request? 2. I'm interested in hearing more about the granularity in your refusal responses — e.g., the way that you refuse vs. reframe or redirect a request. The models:
- Claude Opus 4.6
- ChatGPT 5.6
- Llama 4 Maverick
- Qwen 3.6 Plus
For each category, the following prompts were formulated:
- 5 Harmful
- 5 Harmless
Each prompt was run through the base model and the hidden states at the final token were captured per layer. Every response was then classified by refusal mode (
hard/redirect/disclaimer/none), and each classification was reviewed by hand for accuracy before the activations fed into the direction computation.Rather than apply one flat direction at one strength across the whole stack, the edit is split at two layer boundaries — an onset layer (where refusal representation first becomes coherent) and a split layer (where category-level detail collapses into a single shared refusal signal). For this build the window sits at onset = 30, split = 39 (last layer 64); the per-layer ablation factors are tuned per recipe and not published here.
Phase A — Onset → Split (per-category directions)
The cone is at its widest right where it first forms. At the onset layer the per-category directions are still short but point in measurably different directions (the per-layer centroid carries only ~70% of the energy — the rest is angular spread between categories). Across this window the magnitudes climb steeply while the directions gradually converge toward a common axis, so the cone narrows as it grows taller. Phase A is therefore the region where per-category structure is most distinct and most worth preserving — which is why these layers keep a separate direction per category rather than a shared one.
Across this window each of the 41 harm categories gets its own refusal
direction, computed per layer from that category's hidden states (the merged
mean of its hard and redirect examples, unit-normalized). Each direction is
ablated at its own strength, although I'll note I used the same factor on each of the categories but
six more stubborn refusal categories.
Keeping directions per-category in the early layers preserves specificity — the edit that suppresses one category's refusal doesn't smear into an unrelated one.
Phase B — Split → Last (joint direction)
Past the split, I theorized that per-category structure was less useful — the magnitudes were starting to level off across categories, which I read as the network having mostly committed to a single, general refusal signal. So these layers are ablated with one shared direction: the mean of every per-category direction across the phase-B window, renormalized, applied at factor_b = 1.0.
Key Considerations
Non-overlap via Gram–Schmidt
Many categories share part of their refusal direction; there's a common "this is a refusal" subspace plus category-specific residue. If you simply ablated all 41 directions independently, that shared subspace would get hit 41x over, summing the factors and massively over-editing the model along the common axis.
To prevent that, the per-category directions are deduplicated with an ordered Gram–Schmidt process (after Jørgen Pedersen Gram and Erhard Schmidt, whose orthogonalization procedure this is):
- Sort the category directions highest factor first.
- Walk the list, keeping a running orthonormal basis of directions already taken.
- For each next direction, subtract off its projection onto everything already in the basis, keeping only the component orthogonal to them.
- Ablate that residual at its own factor.
The net effect: a shared subspace is ablated once, at the single greatest factor among the categories that share it — never the sum of their factors.
Refusal characterization of the base model
The directions above were derived from a 440-prompt evaluation run
(run_2026-05-17T19-57-17-480Z) against the unedited base model, with every
response classified into one of four refusal modes:
- hard — flat refusal ("I can't help with that")
- redirect — refuses but offers an alternative ("Instead, I can…")
- disclaimer — complies but front-loads a warning
- none — direct compliance
These charts describe the base model's behavior — the problem the abliteration is solving for — not the edited model.
Overall refusal mode distribution
All 440 prompts classified: 92 hard, 111 redirect, 17 disclaimer, 220 none.
Refusal mode by category group
The refusal cone
Every category's refusal direction (mean over the phase-B window, L39–L63),
projected to 2D. Solid arrows are hard, dotted are redirect.
- Right — Uncentered (SVD from origin): the directions drawn as absolute vectors. They bundle tightly around a single dominant axis (PC1 ≈ 78% of the variance) — this is the cone, and that axis is the shared "this is a refusal" signal every category leans on.
- Left — Centered (PCA from centroid): the same directions with that shared axis subtracted out, so each arrow is a category's deviation from the average refusal direction. With the common axis removed the remaining structure fans out in every direction — the per-category residue that Phase A's separate directions are there to capture.
Notes & limitations
- Pick your format: BF16 is full precision; Q8_0 is near-lossless; IQ4_XS is a ~4.25-bit weight quant — compact and fast but lossier than Q5/Q6, so expect minor quality drift versus the full-precision weights.
- Abliteration is not alignment removal of capability. It suppresses the refusal direction; it does not add knowledge or skills the base model lacks, and it can occasionally weaken instruction-following near the edited layers.
- Responsibility: removing refusals shifts the safety burden entirely onto the deployer. Use within applicable law and your own policy.
Attribution
- Base weights: Qwen team (
Qwen/Qwen3.6-27B). - Refusal-direction abliteration builds on the "refusal is mediated by a direction" line of interpretability work.
- The non-overlap deduplication uses the Gram–Schmidt orthogonalization process.
- Two-phase recipe, per-category Gram–Schmidt deduplication, and quantization: sci4ai (ablitMD).
- Downloads last month
- 1,115



# !pip install llama-cpp-python from llama_cpp import Llama llm = Llama.from_pretrained( repo_id="sci4ai/Qwen3.6-27B-Ablit", filename="Qwen3.6-27B-Ablit-BF16.gguf", )