ThinkingCap โ€” BottleCap AI

ThinkingCap: Nemotron 3.5 Lightning 30B-A3B

ThinkingCap brings our shorter-thinking post-training to NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16 (NVIDIA, 2026), keeping its performance on challenging and agentic tasks while delivering a substantial reduction in thinking verbosity. ThinkingCap Nemotron 3.5 Lightning 30B-A3B cuts reasoning tokens by 23% on average (12% to 31% depending on the benchmark) and holds an average accuracy of 71.4% against the base model's 72.2%. Check our blogpost for more details.

A better ThinkingCap Nemotron is ready for enterprise today. This open checkpoint is our public release; the enterprise version goes further, with fewer thinking tokens still at matched accuracy, and we tune it to your workload. Deployed on your infrastructure, or in the cloud and region you choose. Contact us if you're interested.

ThinkingCap vs. the base model

Video comparison of the original model and the ThinkingCap version, prompted with the same input. Both models run on the same hardware and use the same inference settings.

Shorter thinking, more finished work

On a busy server handling many concurrent requests, fewer thinking tokens pay off twice. Each task finishes sooner, and each running sequence uses less KV cache, so fewer requests get evicted and more can run side by side.

Visualisation of an example scenario where both models receive an unlimited stream of requests, showing how many tasks each can complete within a given time window. The ThinkingCap version uses fewer reasoning tokens, resulting in a smaller KV cache footprint and allowing more tasks to run in parallel.

Both models run on identical setups and get the same chemistry problem, with 20 minutes to solve it. ThinkingCap uses 23% fewer thinking tokens and completes 25 tasks in that time, compared to 11 for the base model. We explain why in Halve the thinking trace length, quadruple the work.

Token efficiency and benchmark performance

BenchmarkAccuracyThinking tokens
BaseOursBase
mean
Ours
mean
Reduction
Knowledge & reasoning
GPQA-Diamond76.03 ยฑ0.6774.78 ยฑ0.7714,68811,157โ†“ 24.0%
MMLU-Pro81.65 ยฑ0.6981.35 ยฑ0.704,3273,026โ†“ 30.1%
MMMLU76.46 ยฑ0.8376.47 ยฑ0.831,9371,371โ†“ 29.2%
Math & code
AIME 202687.45 ยฑ0.8986.41 ยฑ1.0623,29518,106โ†“ 22.3%
HMMT (Feb 2026)75.09 ยฑ1.0874.20 ยฑ1.0333,84528,469โ†“ 15.9%
HMMT (Nov 2025)84.48 ยฑ1.0384.22 ยฑ1.1629,40022,292โ†“ 24.2%
LiveCodeBench v676.64 ยฑ0.7475.46 ยฑ0.8928,81222,590โ†“ 21.6%
SciCode38.37 ยฑ1.4935.89 ยฑ0.969,6418,481โ†“ 12.0%
Long context
AA-LCR59.94 ยฑ2.3960.94 ยฑ2.077,7846,027โ†“ 22.6%
Instruction following & agentic
IFBench71.40 ยฑ0.9869.29 ยฑ1.3612,9918,923โ†“ 31.3%
ฯ„ยฒ-bench67.23 ยฑ1.4766.08 ยฑ1.365,2944,377โ†“ 17.3%
Macro average72.271.415,63812,256โ†“ 22.8%
Evaluation details

Models

Base nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16 against bottlecapai/ThinkingCap-NVIDIA-Nemotron-3.5-Lightning-30B-A3B, shown as Ours.

Metrics

  • Accuracy (Base / Ours) โ€” fraction of correct answers. The ฯ„ยฒ-bench score is an unweighted mean over its three domains (airline, retail, telecom), not pooled over tasks.

  • Thinking tokens (Base / Ours) โ€” mean length of the <think> trace, answer excluded. ฯ„ยฒ-bench is a multi-turn agentic episode, so for that row the count is the reasoning summed over every turn of the episode, not a single trace.

  • (Thinking token) Reduction โ€” the relative change between the two mean columns beside it, (Ours โˆ’ Base) / Base, where each mean is taken over every question and seed of the benchmark. A saving is shown as a green โ†“ percentage.

  • Macro average (bottom row) โ€” equal-weight mean across benchmarks of each column, including the reduction: it is the mean of the per-benchmark reductions, not the ratio of the two token figures beside it.

We separately track two trace-quality failure modes. Truncation: on the single-turn benchmarks, the <think> trace never closes because the model hits the generation cap while still reasoning, so no answer is produced. On ฯ„ยฒ-bench it is an episode-level flag, so it compounds over turns: an episode is marked if any of its turns hits the per-turn cap. Looping: the model repeating the same reasoning until it never finishes, detected with a compression-ratio test on each trace (on ฯ„ยฒ-bench, on the episode's reasoning joined across turns). Both stay below 1% overall and both improve: truncation 0.43% โ†’ 0.22% and looping 0.30% โ†’ 0.16%, equal-weight across benchmarks.

Serving

Hardware: NVIDIA RTX PRO 6000 Blackwell. vLLM 0.27.1 with an FP8 KV cache and no speculative decoding, except SciCode, which both models ran with MTP (num_speculative_tokens=3).

Thinking is on (enable_thinking=True, the chat template's own default), with the base model's recommended sampling โ€” temperature=1.0, top_p=0.95 โ€” used unchanged for Ours.

The generation cap is 253,952 tokens for most benchmarks. AA-LCR and ฯ„ยฒ-bench use 65,536, because their documents and multi-turn transcripts occupy the rest of the window.

Benchmarks

Ten run the complete set: AIME 2026 (30 problems), HMMT Feb 2026 (33), HMMT Nov 2025 (30), GPQA-Diamond (198), IFBench (300), AA-LCR (100), ฯ„ยฒ-bench (278 tasks across airline, retail and telecom), LiveCodeBench v6 (175), SciCode (288 subproblems โ€” the test split) and MMLU-Pro (12,032 โ€” the whole test split).

MMMLU is the one subset: a 10,000-question random sample of the multilingual set, drawn with a fixed seed so every condition sees the same questions.

Seeds and intervals

Independent runs per benchmark: 64 seeds on AIME 2026, HMMT (Feb 2026) and HMMT (Nov 2025); 32 seeds on GPQA-Diamond; 16 seeds on LiveCodeBench v6, AA-LCR, IFBench and ฯ„ยฒ-bench; 8 seeds on SciCode; a single seed on MMLU-Pro and MMMLU. The seed count decides what the accuracy interval means. Multi-seed rows show the 95% t-interval across seeds โ€” how much the answer moves when only the sampling seed changes, at NVIDIA's recommended temperature of 1.0. MMLU-Pro and MMMLU run a single seed over 12,032 and 9,996 questions, so they instead show a 95% Wilson interval over the question outcomes โ€” how much the answer would move on a different draw of questions. The two measure different sources of variance and should not be read against each other.

Usage

HuggingFace Transformers

from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("bottlecapai/ThinkingCap-NVIDIA-Nemotron-3.5-Lightning-30B-A3B", dtype="bfloat16")
tok = AutoTokenizer.from_pretrained("bottlecapai/ThinkingCap-NVIDIA-Nemotron-3.5-Lightning-30B-A3B")

Check https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16 for recommended usage, sampling params etc.

vLLM / SGLang

Serve the bf16 model with either engine. NVIDIA's serving recipes for the base model apply unchanged: vLLM 0.27.1, the version our evaluation ran, and SGLang from the lmsysorg/sglang:dev-nemotron3-5-lightning container. The commands below carry the base model's parsers. The reasoning parser returns the thinking in a separate reasoning / reasoning_content field instead of inline in content, and the tool-call parser turns the model's XML tool calls into structured tool_calls.

# vLLM
vllm serve bottlecapai/ThinkingCap-NVIDIA-Nemotron-3.5-Lightning-30B-A3B --async-scheduling \
  --reasoning-parser nemotron_v3 --enable-auto-tool-choice --tool-call-parser qwen3_coder

# vLLM on an 80 GB GPU (H100): NVIDIA's 1ร—H100 flags added
vllm serve bottlecapai/ThinkingCap-NVIDIA-Nemotron-3.5-Lightning-30B-A3B --async-scheduling \
  --max-num-seqs 128 --enable-prefix-caching --mamba-backend flashinfer --mamba-ssm-cache-dtype float16 \
  --enable-mamba-cache-stochastic-rounding --mamba-cache-philox-rounds 5 \
  --reasoning-parser nemotron_v3 --enable-auto-tool-choice --tool-call-parser qwen3_coder

# SGLang
sglang serve --model-path bottlecapai/ThinkingCap-NVIDIA-Nemotron-3.5-Lightning-30B-A3B \
  --reasoning-parser nemotron_3 --tool-call-parser qwen3_coder

The first vLLM command and the SGLang command run as shown on a B200, and the SGLang command also runs on an H100. On an 80 GB GPU the first vLLM command stops at startup (max_num_seqs (1024) exceeds available Mamba cache blocks), so use the H100 variant there. The base model card lists the recipes for other GPUs.

Speculative decoding

ThinkingCap keeps the base model's built-in MTP head and works with NVIDIA's two external drafters, DSpark and DFlash. With every drafter, on both engines, its acceptance length (the tokens produced per decoding step) matches the base model's (ThinkingCap / base model):

Drafter Drafted per step SGLang vLLM 0.27.1
MTP (built in) 5 4.07 / 4.00 4.01 / 3.85
DSpark 7 4.67 / 4.25 1.24 / 1.23
DFlash 7 3.68 / 3.76 3.82 / 3.78

Measured on a B200 with one request at a time over six prompts, thinking on. Each drafter drafts the same number of tokens per step on both engines: 5 for MTP, as in the base model card's SGLang command, and 7 for DSpark and DFlash, the draft length NVIDIA benchmarks them at. On vLLM 0.27.1, DSpark accepts only about 3% of its drafted tokens with either checkpoint, which makes decoding slower than with no drafter; the same drafter works on SGLang.

To enable a drafter, append its flags to the commands above (tested on a single B200):

# SGLang + MTP
--speculative-algorithm EAGLE --speculative-draft-model-path bottlecapai/ThinkingCap-NVIDIA-Nemotron-3.5-Lightning-30B-A3B \
--speculative-num-steps 5 --speculative-eagle-topk 1 --speculative-num-draft-tokens 6
# SGLang + DSpark
--speculative-algorithm DSPARK --speculative-dspark-block-size 7 --speculative-num-draft-tokens 8 \
--speculative-draft-model-path nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4-DSpark
# SGLang + DFlash (the block counts the verified token: 8 = 7 drafted; 4 on H100)
--speculative-algorithm DFLASH --speculative-dflash-block-size 8 \
--speculative-draft-model-path nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4-DFlash

# vLLM + MTP
--speculative-config '{"method":"mtp","num_speculative_tokens":5}'
# vLLM + DSpark
--speculative_config.model nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4-DSpark \
--speculative_config.num_speculative_tokens 7
# vLLM + DFlash
--speculative_config.model nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4-DFlash \
--speculative_config.num_speculative_tokens 7

Querying the servers

Either server speaks the OpenAI Chat Completions API. Thinking is on by default and is switched with a chat-template argument:

from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="-")   # SGLang: port 30000
r = client.chat.completions.create(
    model="bottlecapai/ThinkingCap-NVIDIA-Nemotron-3.5-Lightning-30B-A3B",
    messages=[{"role": "user", "content": "How many primes are there below 100?"}],
    temperature=1.0, top_p=0.95,
    extra_body={"chat_template_kwargs": {"enable_thinking": True}},   # False answers directly
)
print(r.choices[0].message.reasoning)               # the thinking (`reasoning_content` on SGLang)
print(r.choices[0].message.content)                 # the answer

Quantized versions

Same checkpoint, chat template and license, quantized for smaller footprints and faster serving:

Where to find us

Website LinkedIn Instagram X

License

Released under the base model's own license, the OpenMDW License Agreement 1.1 (full text in LICENSE).

Citation

If you use this model, please cite:

@misc{ThinkingCap-NVIDIA-Nemotron-3.5-Lightning-30B-A3B,
  title     = {bottlecapai/ThinkingCap-NVIDIA-Nemotron-3.5-Lightning-30B-A3B},
  author    = {Osusky, Adam and Lindauer, Jan and Jirkovsky, Adam and Mihal, Filip and Platek, Ondrej and Herel, David and Ihnatchenko, Luka and Bartek, Vojtech and Jirak, Jiri and Kubista, Daniel and Krus, Frantisek and Mikolov, Tomas},
  year      = {2026},
}
Downloads last month
380
Safetensors
Model size
32B params
Tensor type
F32
ยท
BF16
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for bottlecapai/ThinkingCap-NVIDIA-Nemotron-3.5-Lightning-30B-A3B

Finetuned
(29)
this model
Merges
1 model
Quantizations
5 models