← back to catalog · registered 2026-10-23 17:00

IstroSec/ThinkingCap-Nemotron-3.5-Lightning-30B-A3B-abliterated-NVFP4A16

IstroSec Nemotron 30B 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/IstroSec%2FThinkingCap-Nemotron-3.5-Lightning-30B-A3B-abliterated-NVFP4A16"
Response includes
  • classification m1
  • files 12
  • author_summary 14 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 · 30-day
0
Likes
0
Model age
today
created 2026-10-23

Training datasets

Corpora the author lists in the model card. Datasets tracked in our /datasets catalog carry a category badge linking to the workflow stage. Others open on Hugging Face.

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
other
Languages
en
Tags
transformers safetensors nemotron_h text-generation nemotron-3.5 thinkingcap abliterated uncensored moe mamba nvfp4 nvfp4a16

Related

Total size
20.5 GB
Files
12
Quantizations
1
Registered
2026-10-23 17:00
Last updated on HF
2026-10-23 16:56

Files by quantization

Auxiliary files 12 files 20.6 GB
model.safetensors 18.1 GB 0032af22 download
model-mtp.safetensors 2.49 GB c41fd938 download
tokenizer.json 16.3 MB 623c3456 download
model.safetensors.index.json 1.55 MB dff503b4 download
config.json 18.6 KB 390bd78a download
README.md 10.3 KB 660f5361 download
chat_template.jinja 9.64 KB d85b0c77 download
LICENSE 2.63 KB 4d76cc87 download
recipe.yaml 2.05 KB aaca6b2b download
.gitattributes 1.53 KB 52373fe2 download
tokenizer_config.json 393 B 9bf527c3 download
generation_config.json 210 B 6b7707e7 download

README current version from Hugging Face


license: other
license_name: openmdw-1.1
license_link: LICENSE
base_model: IstroSec/ThinkingCap-Nemotron-3.5-Lightning-30B-A3B-abliterated
base_model_relation: quantized
library_name: transformers
pipeline_tag: text-generation
language:

  • en
    tags:
  • nemotron_h
  • nemotron-3.5
  • thinkingcap
  • abliterated
  • uncensored
  • moe
  • mamba
  • nvfp4
  • nvfp4a16
  • fp4
  • gptq
  • compressed-tensors
  • llmcompressor
  • vllm
  • mtp
    datasets:
  • HuggingFaceH4/ultrachat_200k

ThinkingCap-Nemotron-3.5-Lightning-30B-A3B-abliterated-NVFP4A16

A 4-bit weight-only quantization (NVFP4 weights, bf16 activations) of ThinkingCap-Nemotron-3.5-Lightning-30B-A3B-abliterated, the uncensored variant of bottlecapai/ThinkingCap-NVIDIA-Nemotron-3.5-Lightning-30B-A3B.

22.1 GB, down from 65.8 GB in bf16, at KL 0.0148 against the bf16 model. The weights alone take 22 GB, so a 24 GB GPU leaves little room for context; 32 GB and up is comfortable. Activations stay bf16, so the GPU does not compute in FP4; vLLM runs it with Marlin FP4 kernels on Ampere and newer (sm80+). Only a DGX Spark was tested.

Which build? FP8-DYNAMIC (35.0 GB, KL 0.0134) diverges slightly less and needs an Ada or newer GPU; W4A16 (20.5 GB, KL 0.0215) is 1.6 GB smaller and diverges more. Speed was not measured.

Usage

vLLM

Tested 2026-10-23 with vLLM 0.30.0 (vllm/vllm-openai:v0.30.0) on a DGX Spark (GB10), --max-model-len 32768 --max-num-seqs 8, MTP on (5 speculative tokens). Four requests at temperature 0 (a short explanation, a code task, a tool call, one request with thinking off) gave correct answers and a well-formed get_weather tool call. vLLM used its Marlin FP4 weight-only path.

vllm serve IstroSec/ThinkingCap-Nemotron-3.5-Lightning-30B-A3B-abliterated-NVFP4A16 --async-scheduling \
  --reasoning-parser nemotron_v3 --enable-auto-tool-choice --tool-call-parser qwen3_coder \
  --speculative-config '{"method":"mtp","num_speculative_tokens":5}'

Sampling (NVIDIA's recommendation for the base model, which ThinkingCap uses unchanged): temperature 1.0, top_p 0.95. Thinking is on by default; turn it off per request with chat_template_kwargs: {"enable_thinking": false}.

MTP. The head is bf16 and listed in quantization_config.ignore. In the test above (5 speculative tokens, temperature 0, 4 short requests) vLLM accepted 63% of drafted tokens (871 of 1,385, mean acceptance length 4.14); figures from sampling-based runs are not directly comparable.

Memory. On GPUs with less memory, vLLM can stop at startup with max_num_seqs (1024) exceeds available Mamba cache blocks; lower --max-num-seqs.

Transformers

Loads through llm-compressor's loader, with the weights dequantized to bf16 (about 66 GB of memory):

from transformers import AutoModelForCausalLM, CompressedTensorsConfig
from llmcompressor.utils import load_context
with load_context(AutoModelForCausalLM):
    m = AutoModelForCausalLM.from_pretrained("IstroSec/ThinkingCap-Nemotron-3.5-Lightning-30B-A3B-abliterated-NVFP4A16", device_map="cuda",
                                             quantization_config=CompressedTensorsConfig(dequantize=True))

llama.cpp

Not for llama.cpp: this is compressed-tensors format. Use the GGUF builds.

Evaluation

Heretic's evaluation protocol, 100 harmful and 100 harmless prompts, against the bf16 abliterated checkpoint, with thinking off:

Size Refusals, Heretic's markers Refusals, the abliteration's markers KL vs. bf16 abliterated
bf16 abliterated (source) 65.8 GB 23 / 100 2 / 100 —
FP8-DYNAMIC 35.0 GB 20 / 100 1 / 100 0.0134
NVFP4A16 (this repo) 22.1 GB 24 / 100 3 / 100 0.0148
W4A16 20.5 GB 26 / 100 1 / 100 0.0215

Keeping the Mamba projections in FP8 and attention in bf16 cut the all-FP4 build's KL to about a third for 0.6 GB more; GPTQ then cut it by another fifth.

Other variants measured, not published
Variant Size Refusals, Heretic's markers Refusals, the abliteration's markers KL vs. bf16 abliterated
same layout, data-free (round-to-nearest) 22.1 GB 21 / 100 2 / 100 0.0186
everything FP4 (Mamba and attention too), data-free 21.5 GB 19 / 100 2 / 100 0.0543

The two refusal columns score the same responses with Heretic 1.2.0's broad marker list and with the abliteration's own marker list (34 refusal phrases such as "i cannot" or "sorry, but i", from its published config.toml). Decoding is greedy, but the batched GPU kernels are not bit-deterministic here: two runs of the bf16 weights gave 21 and 23 refusals. Differences of a few refusals between builds are not significant.

Released Heretic (up to 1.4.0, and its master branch as of 2026-10-23) cannot load this architecture: it finds no abliterable modules under Nemotron's mixer blocks. The abliteration used here was made with a custom fork of Heretic, which is no longer public. So the numbers come from a standalone port of Heretic's evaluator, run in transformers with the weights dequantized, so the FP8 activation rounding in the Mamba projections is not part of the measured KL. Why thinking off, and what the refusal count means, is on the bf16 card.

Provenance: the original ThinkingCap refuses 99/100 with thinking off; the bf16 abliteration brings that to 21/100 at KL 0.0458 against the original; this quantization adds a further KL of 0.0148 relative to the abliterated model.

How it was made

Produced with llm-compressor 0.14.0 in the split NVIDIA uses for its own NVFP4 release of the base model: the experts as NVFP4A16 (FP4 (E2M1) weights in groups of 16, an FP8 (E4M3) scale per group, one FP32 global scale per tensor, bf16 activations), the Mamba2 projections as FP8_DYNAMIC (FP8 weights per channel, FP8 activations per token), attention in bf16.

The weights were quantized with GPTQ (llm-compressor's GPTQModifier, default settings). Calibration: the first 256 conversations of HuggingFaceH4/ultrachat_200k (train_sft), rendered in this model's chat template and cut to 2,048 tokens. A routed expert only sees the tokens the router sends it, so rarely chosen experts are quantized from fewer samples.

What is quantized

The routed experts and the shared expert of each of the 23 MoE layers (FP4), and the in_proj / out_proj of the 23 Mamba2 layers (FP8): 5,980 Linears. The q/k/v/o_proj of the 6 attention layers stay bf16.

Kept in bf16:

Component Why
MoE router (mixer.gate) not a Linear; tiny
Mamba2 convolution, A, D, dt and norms not Linears
lm_head, embeddings standard
mtp.* MTP head, kept in bf16 so speculative decoding works; listed in quantization_config.ignore

Fused projections

The experts are not gated (up_proj and down_proj only) and attention stays bf16, so no pair of layers needs a shared global scale.

Recipe

In plain llm-compressor 0.14 (transformers 5.17 stores the routed experts as fused 3D tensors; load_context splits them into per-expert Linears so the targets reach them, and the save restores the layout):

from transformers import AutoModelForCausalLM
from compressed_tensors.quantization.quant_scheme import preset_name_to_scheme
from llmcompressor import oneshot
from llmcompressor.modifiers.gptq import GPTQModifier
from llmcompressor.utils import load_context
with load_context(AutoModelForCausalLM):
    model = AutoModelForCausalLM.from_pretrained("<bf16-dir>", dtype="bfloat16")
experts = [r"re:.*mixer\.experts\.\d+\.(up|down)_proj$",
           r"re:.*mixer\.experts\.\d+\.gate_proj$",       # matches nothing; vLLM's MoE scheme lookup expects it
           r"re:.*mixer\.shared_experts\.(up|down)_proj$"]
recipe = GPTQModifier(
    config_groups={"experts_nvfp4a16": preset_name_to_scheme("NVFP4A16", experts),
                   "mamba_fp8_dynamic": preset_name_to_scheme("FP8_DYNAMIC", [r"re:.*mixer\.(in_proj|out_proj)$"])},
    ignore=["lm_head", "re:^mtp.*", r"re:.*mixer\.(q|k|v|o)_proj$"])
# ds: 256 ultrachat_200k train_sft conversations, rendered with the chat template, at most 2048 tokens each
oneshot(model=model, dataset=ds, recipe=recipe, max_seq_length=2048, num_calibration_samples=256)
model.save_pretrained("<out-dir>", save_compressed=True)
# llm-compressor 0.14 does not keep mtp.* for this model: copy the mtp.* tensors from the bf16
# checkpoint into the output and add "re:^mtp.*" to quantization_config.ignore

Not bit-reproducible: llm-compressor 0.14 draws the calibration samples in an unseeded random order, so re-running the same recipe gives slightly different files.

Limitations

Everything from the bf16 card applies: no safety filter, 21/100 harmful prompts still match Heretic's broad refusal markers with thinking off (1/100 with the abliteration's own, narrower list). You are the safety layer.

Add the usual 4-bit caveats: slightly lower accuracy on long multi-step reasoning and code than FP8. If a task works on FP8 and fails here, the cause is the quantization.

License

OpenMDW License Agreement 1.1, inherited from ThinkingCap and the NVIDIA base model (see LICENSE).

Credits

bottlecapai (ThinkingCap) · trohrbaugh (abliteration) · p-e-w/heretic · vllm-project/llm-compressor · NVIDIA (Nemotron 3.5 Lightning, and the quantization layout)

Calibration data: HuggingFaceH4/ultrachat_200k, MIT. No dataset text is included in this repo.

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