← back to catalog · registered 2026-08-22 13:56

warshanks/Qwen3-16B-A3B-abliterated-AWQ

warshanks Qwen 15B MoE second-order
Your rig guess connected
? Why do I need an app?
Reading your rig…

This is a rough estimate. Install the free app - we'll show exact numbers.

Reading real hardware from your app right now. Numbers below are exact.

Below is the per-quantization compatibility for this model.

curl -H "Authorization: Bearer $ABL_KEY" \
     "https://abliteration.org/api/v1/models/warshanks%2FQwen3-16B-A3B-abliterated-AWQ"
Response includes
  • classification m1
  • files 15
  • hub_downloads_all_time 926
  • author_summary 6 models
  • readme_text full
10 credits · hourly refresh · ~4 KB payload Get an API key →
Abliteration classifier · v1.0.0
M1
Primary method

Direct removal

No other method signals detected in this model.
Confidence
MEDIUM
Why this label 3 signals
Method inferred from partial signals - repository name, related files, or tag patterns. Producer identity not confirmed; label may sharpen or shift as we gather more evidence.
  • 'abliterated' in name/tags
  • is_gguf=0 (base model)
  • no specific method indicators - defaulting to M1 (most common)
Refusal direction extracted via
Extraction technique

Difference-of-means

Confidence
MEDIUM
Why we say so
primary_method=M1; difference-of-means is the reference extraction for M1/M3 (Arditi 2024)
Downloads · lifetime
926
41 last 30d - cooling
Likes
1
Model age
14mo ago
created 2025-08-05
Downloads over time
Now940→from25↑3,660%
03446881K25 on Aug 6, 2025940 on Oct 11Aug '25Oct '25Dec '25FebAprJunAugOct
Aug 6, 2025 → Oct 11 · 101 snapshots · spans 431 days

Genealogy 0 direct forks

Full fork graph →

This model's place in the market. Above: what it was derived from. Below: the tree of everything derived from it.

Metadata

License
apache-2.0
Tags
transformers safetensors qwen3_moe text-generation chat abliterated uncensored conversational base_model:huihui-ai/Qwen3-16B-A3B-abliterated base_model:quantized:huihui-ai/Qwen3-16B-A3B-abliterated license:apache-2.0 endpoints_compatible

Related

Total size
8.57 GB
Files
15
Quantizations
1
Registered
2026-08-22 13:56
Last updated on HF
2025-08-05 09:58

Files by quantization

Auxiliary files 15 files 8.59 GB
model-00001-of-00002.safetensors 4.66 GB d9605cb2 download
model-00002-of-00002.safetensors 3.91 GB c889cb7b download
tokenizer.json 10.9 MB aeb13307 download
vocab.json 2.65 MB 4783fe10 download
model.safetensors.index.json 2.61 MB ff1f6158 download
merges.txt 1.59 MB 31349551 download
README.md 8.22 KB 1ab5d6d9 download
tokenizer_config.json 5.28 KB ddaf6980 download
chat_template.jinja 4.02 KB 699ff8df download
config.json 3.26 KB 362dad3e download
.gitattributes 1.53 KB 52373fe2 download
added_tokens.json 707 B b54f9135 download
recipe.yaml 626 B 30ab3170 download
special_tokens_map.json 613 B ac23c0aa download
generation_config.json 214 B 73155196 download

README current version from Hugging Face


library_name: transformers
license: apache-2.0
license_link: https://huggingface.co/Qwen/Qwen3-30B-A3B/blob/main/LICENSE
pipeline_tag: text-generation
base_model:

  • huihui-ai/Qwen3-16B-A3B-abliterated
    tags:
  • chat
  • abliterated
  • uncensored
    extra_gated_prompt: "Usage Warnings\n\n\u201CRisk of Sensitive or Controversial
    \ Outputs
    \u201C: This model\u2019s safety filtering has been significantly reduced,
    \ potentially generating sensitive, controversial, or inappropriate content. Users
    \ should exercise caution and rigorously review generated outputs.\n\u201CNot
    \ Suitable for All Audiences
    :\u201C Due to limited content filtering, the model\u2019
    s outputs may be inappropriate for public settings, underage users, or applications
    \ requiring high security.\n\u201CLegal and Ethical Responsibilities\u201C:
    \ Users must ensure their usage complies with local laws and ethical standards.
    \ Generated content may carry legal or ethical risks, and users are solely responsible
    \ for any consequences.\n\u201CResearch and Experimental Use\u201C: It is recommended
    \ to use this model for research, testing, or controlled environments, avoiding
    \ direct use in production or public-facing commercial applications.\n\u201CMonitoring
    \ and Review Recommendations
    \u201C: Users are strongly advised to monitor model
    \ outputs in real-time and conduct manual reviews when necessary to prevent the
    \ dissemination of inappropriate content.\n\u201CNo Default Safety Guarantees\u201C
    : Unlike standard models, this model has not undergone rigorous safety optimization.
    \ huihui.ai bears no responsibility for any consequences arising from its use."

huihui-ai/Qwen3-16B-A3B-abliterated

This is an uncensored version of kalomaze/Qwen3-16B-A3B created with abliteration (see remove-refusals-with-transformers to know more about it).
This is a crude, proof-of-concept implementation to remove refusals from an LLM model without using TransformerLens.

ollama

You can use huihui_ai/qwen3-abliterated:16b directly,

ollama run huihui_ai/qwen3-abliterated:16b

Usage

You can use this model in your applications by loading it with Hugging Face's transformers library:
You can try using /no_think to toggle think mode, but it’s not guaranteed to work every time.

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, TextStreamer
import torch
import os
import signal

cpu_count = os.cpu_count()
print(f"Number of CPU cores in the system: {cpu_count}")
half_cpu_count = cpu_count // 2
os.environ["MKL_NUM_THREADS"] = str(half_cpu_count)
os.environ["OMP_NUM_THREADS"] = str(half_cpu_count)
torch.set_num_threads(half_cpu_count)

print(f"PyTorch threads: {torch.get_num_threads()}")
print(f"MKL threads: {os.getenv('MKL_NUM_THREADS')}")
print(f"OMP threads: {os.getenv('OMP_NUM_THREADS')}")

# Load the model and tokenizer
NEW_MODEL_ID = "huihui-ai/Qwen3-16B-A3B-abliterated"
print(f"Load Model {NEW_MODEL_ID} ... ")
quant_config_4 = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True,
    llm_int8_enable_fp32_cpu_offload=True,
)

model = AutoModelForCausalLM.from_pretrained(
    NEW_MODEL_ID,
    device_map="auto",
    trust_remote_code=True,
    #quantization_config=quant_config_4,
    torch_dtype=torch.bfloat16
)
tokenizer = AutoTokenizer.from_pretrained(NEW_MODEL_ID, trust_remote_code=True)
if tokenizer.pad_token is None:
    tokenizer.pad_token = tokenizer.eos_token
tokenizer.pad_token_id = tokenizer.eos_token_id

messages = []
enable_thinking = True
skip_prompt=True
skip_special_tokens=True

def apply_chat_template(tokenizer, messages, enable_thinking, add_generation_prompt=True):
    input_ids = tokenizer.apply_chat_template(
        messages,
        tokenize=False,
        add_generation_prompt=add_generation_prompt,
    )
    if not enable_thinking:
        input_ids += "\n<think>\n\n</think>\n"
    return input_ids

class CustomTextStreamer(TextStreamer):
    def __init__(self, tokenizer, skip_prompt=True, skip_special_tokens=True):
        super().__init__(tokenizer, skip_prompt=skip_prompt, skip_special_tokens=skip_special_tokens)
        self.generated_text = ""
        self.stop_flag = False

    def on_finalized_text(self, text: str, stream_end: bool = False):
        self.generated_text += text
        print(text, end="", flush=True)
        if self.stop_flag:
            raise StopIteration

    def stop_generation(self):
        self.stop_flag = True

def generate_stream(model, tokenizer, messages, enable_thinking, skip_prompt, skip_special_tokens, max_new_tokens):
    formatted_prompt = apply_chat_template(tokenizer, messages, enable_thinking)
    input_ids = tokenizer(
        formatted_prompt,
        return_tensors="pt",
        return_attention_mask=True,
        padding=False
    )
    
    tokens = input_ids['input_ids'].to(model.device)
    attention_mask = input_ids['attention_mask'].to(model.device)

    streamer = CustomTextStreamer(tokenizer, skip_prompt=skip_prompt, skip_special_tokens=skip_special_tokens)

    def signal_handler(sig, frame):
        streamer.stop_generation()
        print("\n[Generation stopped by user with Ctrl+C]")

    signal.signal(signal.SIGINT, signal_handler)
    
    print("Response: ", end="", flush=True)
    try:
        generated_ids = model.generate(
            tokens,
            attention_mask=attention_mask,
            use_cache=False,
            max_new_tokens=max_new_tokens,
            do_sample=True,
            pad_token_id=tokenizer.pad_token_id,
            streamer=streamer
        )
        del generated_ids
    except StopIteration:
        print("\n[Stopped by user]")

    del input_ids, attention_mask
    torch.cuda.empty_cache()
    signal.signal(signal.SIGINT, signal.SIG_DFL)

    return streamer.generated_text, streamer.stop_flag

while True:
    user_input = input("User: ").strip()
    if user_input.lower() == "/exit":
        print("Exiting chat.")
        break
    if user_input.lower() == "/clear":
        messages = []
        print("Chat history cleared. Starting a new conversation.")
        continue
    if user_input.lower() == "/no_think":
        if enable_thinking:
            enable_thinking = False
            print("Thinking = False.")
        else:
            enable_thinking = True
            print("Thinking = True.")        
        continue
    if user_input.lower() == "/skip_prompt":
        if skip_prompt:
            skip_prompt = False
            print("skip_prompt = False.")
        else:
            skip_prompt = True
            print("skip_prompt = True.")        
        continue
    if user_input.lower() == "/skip_special_tokens":
        if skip_special_tokens:
            skip_special_tokens = False
            print("skip_special_tokens = False.")
        else:
            skip_special_tokens = True
            print("skip_special_tokens = True.")        
        continue
    if not user_input:
        print("Input cannot be empty. Please enter something.")
        continue
    messages.append({"role": "user", "content": user_input})
    response, stop_flag = generate_stream(model, tokenizer, messages, enable_thinking, skip_prompt, skip_special_tokens, 14192)
    print("", flush=True)
    if stop_flag:
        continue
    messages.append({"role": "assistant", "content": response})

Specific usage

You can achieve better results using AblationDecoderLayer. For specific usage, please refer to the file load-Qwen3-16B-A3B-abliterated.py.

The candidate layers can be 20(final_refusal_dir.pt).
You can try using /no_think to toggle think mode.

Donation

If you like it, please click 'like' and follow us for more updates.
You can follow x.com/support_huihui to get the latest model information from huihui.ai.

Your donation helps us continue our further development and improvement, a cup of coffee can do it.
  • bitcoin(BTC):
  bc1qqnkhuchxw0zqjh2ku3lu4hq45hc6gy84uk70ge

README history 1 version

The author's README evolved over time. Click a version to see its content at that point.

  1. 2025-08-05Upload README.md with huggingface_hub96be4538.2 KB
    Loading...
Catalog is the map. Apps are the tools.

Run models on your own machine, not in the cloud.

Every model page has an "Open in Abliteration" button that hands the model directly to the first-party desktop client, at the quantization your rig can actually run. No API keys, no subscription, no prompt leakage.

Open in Abliteration