Instructions to use IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC") 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("IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC") model = AutoModelForMultimodalLM.from_pretrained("IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC", 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
- vLLM
How to use IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC", "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/IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC
- SGLang
How to use IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC 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 "IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC" \ --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": "IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC", "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 "IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC" \ --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": "IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC", "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" } } ] } ] }' - Docker Model Runner
How to use IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC with Docker Model Runner:
docker model run hf.co/IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC
ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC
An FP8 quantization (W8A8: per-channel FP8 weights, dynamic per-token FP8 activations) of ThinkingCap-Qwen3.8-27B-abliterated, the uncensored variant of bottlecapai/ThinkingCap-Qwen3.8-27B.
31.3 GB, down from 55.6 GB in bf16, at KL 0.0068 against the bf16 model. vLLM runs it as W8A8 on FP8-capable GPUs (Hopper, Ada, Blackwell, DGX Spark) and as weight-only FP8 on Ampere, through its Marlin fallback; no custom kernels either way.
Which build? The FP8-BLOCK build has the same size and a lower KL (0.0046 against 0.0068), and ran at the same speed on a DGX Spark with vLLM 0.30. Prefer it on Blackwell. On Hopper, vLLM 0.30 by default runs block-scaled FP8 through DeepGEMM with the block scales rounded to powers of two (per its source; not tested here): use FP8-BLOCK with VLLM_USE_DEEP_GEMM=0, or this build. This per-channel build stays for Ada GPUs (RTX 40xx, L40S, L4), where vLLM runs it as W8A8 but has no W8A8 kernel for the block-scaled one. Other vLLM versions and engines were not checked with the block-scaled build.
Usage
vLLM
Tested 2026-10-07 with vLLM 0.30.0 (vllm/vllm-openai:v0.30.0) on a DGX Spark (GB10), text only (--language-model-only), --max-model-len 32768, MTP on. vLLM chose CutlassFP8ScaledMMLinearKernel. One test prompt at temperature 0 was answered correctly. Eight varied prompts at temperature 0 ran at 16.88 tokens/s; their answers were not inspected. A forced 512-token request without MTP, run twice, gave 7.91-7.93 tokens/s. Image input was not tested.
On a DGX Spark, use a vLLM build with cu130 wheels.
vllm serve IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC \
--language-model-only \
--reasoning-parser qwen3 \
--enable-auto-tool-choice --tool-call-parser qwen3_xml \
--speculative-config '{"method":"mtp","num_speculative_tokens":3}' \
--max-model-len 65536 --gpu-memory-utilization 0.85
Sampling (Qwen3.8 recommendations, which ThinkingCap uses unchanged): thinking mode temperature 1.0, top_p 0.95, top_k 20, min_p 0; non-thinking mode temperature 0.7, top_p 0.8, top_k 20, presence_penalty 1.5. Thinking budget via chat_template_kwargs: {"reasoning_effort": "xhigh"}, with xhigh (default, recommended), medium or low.
KV cache. Only the 16 full-attention layers have a KV cache, so FP8 KV (--kv-cache-dtype fp8) saves less memory than on a dense model. Leave it at auto unless memory is short; if you do enable it, fp8_e5m2 needs no scales.
MTP. The head is bf16 and listed in quantization_config.ignore. In the test above (3 speculative tokens, temperature 0, 8 prompts) vLLM accepted 69.5% of drafted tokens (3,410 of 4,905, mean acceptance length 3.09); figures from sampling-based runs are not directly comparable.
Image input. For text-only use keep --language-model-only; it also skips the vision tower's memory. For images, drop it and keep MTP. If startup then fails in profile_run with 'NoneType' object has no attribute 'size', vLLM reused a compiled graph cached by an earlier run with different multimodal limits (vllm#58203, a duplicate of vllm#50891): start with a fresh VLLM_CACHE_ROOT or set VLLM_USE_AOT_COMPILE=0.
Transformers
Loads with the weights dequantized to bf16, so it needs about 56 GB of memory:
from transformers import AutoModelForImageTextToText
m = AutoModelForImageTextToText.from_pretrained("IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC", device_map="cuda")
llama.cpp
Not for llama.cpp: this is compressed-tensors format. GGUF builds are made separately from the bf16 source.
Evaluation
Heretic's evaluator (--evaluate-model), 100 harmful and 100 harmless prompts, against the bf16 abliterated checkpoint:
| Size | Refusals (100 harmful) | KL vs. bf16 abliterated | |
|---|---|---|---|
| bf16 abliterated (source) | 55.6 GB | 6 / 100 | โ |
| FP8, DeltaNet kept in bf16 (earlier build) | 36.8 GB | 7 / 100 | 0.0047 |
| FP8, DeltaNet quantized (this repo) | 31.3 GB | 7 / 100 | 0.0068 |
Quantizing DeltaNet saved 5.5 GB for 0.0021 more KL, so this build replaced the earlier one.
Heretic decodes greedily, so there is no sampling noise, but a re-run with a different batch size can still move a count by about one prompt. Differences of one or two refusals are not significant.
Provenance: the original ThinkingCap refuses 97/100; the bf16 abliteration brings that to 6/100 at KL 0.065 against the original; this quantization adds a further KL of 0.0068 relative to the abliterated model.
How it was made
Produced with llm-compressor 0.14.0, scheme FP8_DYNAMIC: per-channel FP8 (E4M3) weights, per-token dynamic FP8 activations. Data-free: no calibration set.
What is quantized
Every Linear in the text decoder: the 64 MLPs, the q/k/v/o_proj of the 16 full-attention layers, and the three large Gated DeltaNet projections (in_proj_qkv, in_proj_z, out_proj) in the other 48 layers.
Kept in bf16:
| Component | Why |
|---|---|
linear_attn.in_proj_a, in_proj_b |
tiny (output dimension 48); negligible size, kept at full precision as in bottlecapai's own recipe |
visual.* |
vision tower and merger |
lm_head |
standard |
mtp.* |
MTP head, kept in bf16 so speculative decoding works; its Linears are in quantization_config.ignore |
Fused projections
Per-channel FP8 scales stay correct when vLLM runs in_proj_qkv and in_proj_z as one fused GEMM, so this build needs no special scale handling. The NVFP4A16 build does; see its card.
Recipe
In plain llm-compressor 0.14:
from llmcompressor import oneshot
from llmcompressor.modifiers.quantization import QuantizationModifier
recipe = QuantizationModifier(
targets="Linear", scheme="FP8_DYNAMIC",
ignore=["lm_head", "re:.*visual.*", "re:.*linear_attn\\.in_proj_(a|b)$"],
)
oneshot(model=model, recipe=recipe)
# llm-compressor 0.14 keeps mtp.* in bf16 when it saves; then add the MTP Linears to quantization_config.ignore
# (older versions drop mtp.*: copy it from the bf16 checkpoint first)
Limitations
Everything from the bf16 card applies: no safety filter, residual refusals around 6/100; thinking and non-thinking modes were not evaluated separately. You are the safety layer.
Speed was measured only on a DGX Spark. On Ampere vLLM runs this build weight-only (see the summary).
License
PolyForm Small Business License 1.0.0 + BottleCap personal-use grant, inherited from ThinkingCap (see LICENSE). Upstream Qwen materials and the abliteration adapter are Apache-2.0 (see NOTICE). Commercial use beyond the PolyForm terms: contact BottleCap AI.
Credits
bottlecapai (ThinkingCap, and the DeltaNet quantization recipe) ยท MuXodious (abliteration adapter) ยท p-e-w/heretic ยท vllm-project/llm-compressor ยท Qwen team
- Downloads last month
- 129
Model tree for IstroSec/ThinkingCap-Qwen3.8-27B-abliterated-FP8-DYNAMIC
Base model
IstroSec/ThinkingCap-Qwen3.8-27B-abliterated