Request access to the BottleCap AI model

This repository is publicly accessible, but you have to accept the conditions to access its files and content.

Request access below. Add your company if you're evaluating this for work — we have enterprise versions that go further, and we'll make sure you hear about them first. We'll also send you new ThinkingCap releases and early access before they're public.

Tell us how you plan to use the model and we can help you get the most out of it — there's a short form for that too.

Log in or Sign Up to review the conditions and access this model content.

ThinkingCap — BottleCap AI

ThinkingCap: Qwen 3.8 27B

In the second installment of our ThinkingCap series, we focus on maintaining the performance of Qwen3.8-27B (Qwen Team, 2026) on challenging and agentic tasks while delivering a substantial reduction in thinking verbosity. ThinkingCap Qwen3.8-27B cuts reasoning tokens by 37% on average (11% to 66% depending on the benchmark) and holds an average accuracy of 85.8% against the base model's 86.6%. It shines in long-context retrieval, where it cuts reasoning by 39% with accuracy intact (+2.3pp). Check our blogpost for more details.

Token efficiency and benchmark performance

BenchmarkAccuracyThinking tokens
BaseOursBase
mean
Ours
mean
Reduction
Knowledge & reasoning
GPQA-Diamond89.93 ±0.7088.04 ±1.0912,7727,267↓ 43.1%
MMLU-Pro85.54 ±0.6384.67 ±0.643,7251,591↓ 57.3%
MMMLU85.38 ±0.6984.09 ±0.721,656571↓ 65.5%
Math & code
AIME 202698.13 ±0.7494.27 ±1.4715,66310,934↓ 30.2%
HMMT (Feb 2026)95.83 ±1.1694.70 ±1.5023,21118,099↓ 22.0%
HMMT (Nov 2025)97.08 ±1.4396.04 ±2.1714,44310,037↓ 30.5%
LiveCodeBench v691.14 ±1.1191.21 ±1.2828,39522,645↓ 20.3%
Long-context & multimodal
AA-LCR81.75 ±1.0784.00 ±0.772,5501,565↓ 38.6%
RealWorldQA83.25 ±0.7382.34 ±0.71992492↓ 50.4%
Instruction following & agentic
IFBench79.75 ±0.6379.71 ±0.607,9614,266↓ 46.4%
τ²-bench76.16 ±1.5275.15 ±1.674,5843,168↓ 30.9%
Terminal-Bench 2.175.84 ±4.2675.28 ±4.3872,87165,092↓ 10.7%
Macro average86.685.815,73512,144↓ 37.2%
Evaluation details

Models

Base Qwen/Qwen3.8-27B against bottlecapai/ThinkingCap-Qwen3.8-27B, 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 and Terminal-Bench are multi-turn agentic episodes, so for those two rows the count is the reasoning summed over every turn of the episode (about 15 and 40 turns on average), 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 the multi-turn benchmarks it is an episode-level flag, so it compounds over turns — τ²-bench marks an episode if any of its turns hits the per-turn cap, and Terminal-Bench marks a trial that exhausted its three-hour agent budget, which scores 0. Looping: the model repeating the same reasoning until it never finishes, detected with a compression-ratio test on the single-turn benchmarks and by the agent harness's own stalled-turn rule on Terminal-Bench. Both stay below 1% overall and both improve: truncation 0.51% → 0.34% and looping 0.06% → 0.05%, equal-weight across benchmarks.

Serving

Hardware: NVIDIA H200. vLLM 0.29.0, with MTP speculative decoding (num_speculative_tokens=3).

Thinking is on at reasoning_effort=xhigh, the chat template's own default, with the base model's recommended sampling — temperature=1.0, top_p=0.95, top_k=20, min_p=0.0 — used unchanged for Ours.

The generation cap is 253,952 tokens for most benchmarks. AA-LCR uses 131,072 and τ²-bench 65,536, because their documents and multi-turn transcripts occupy the rest of the window.

Benchmarks

Eleven run the complete set: AIME 2026 (30 problems), HMMT Feb 2026 (33), HMMT Nov 2025 (30), GPQA-Diamond (198), IFBench (300), RealWorldQA (765), AA-LCR (100), τ²-bench (278 tasks across airline, retail and telecom), Terminal-Bench 2.1 (89 tasks, Terminus-2 agent under Harbor), LiveCodeBench v6 (175) 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: 32 seeds on AIME 2026; 16 seeds on GPQA-Diamond, HMMT (Feb 2026), HMMT (Nov 2025) and IFBench; 8 seeds on LiveCodeBench v6, AA-LCR, RealWorldQA and τ²-bench; 4 seeds on Terminal-Bench 2.1; 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 Qwen'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.

Thinking mode comparison

We recommend using this model at the xhigh thinking effort for the best balance between accuracy and reasoning token usage. At lower efforts, the ThinkingCap treatment amplifies the effect of the effort setting while keeping its original trade-off. We plan to focus on improving the individual thinking modes in a future release.

Reasoning efforts comparison

Usage

HuggingFace Transformers

from transformers import AutoModelForImageTextToText, AutoProcessor
model = AutoModelForImageTextToText.from_pretrained("bottlecapai/ThinkingCap-Qwen3.8-27B", dtype="bfloat16")
proc = AutoProcessor.from_pretrained("bottlecapai/ThinkingCap-Qwen3.8-27B")

Check https://huggingface.co/Qwen/Qwen3.8-27B for recommended usage, sampling params etc.

vLLM / SGLang

Serve the bf16 model with either engine. The reasoning parser returns the thinking in a separate reasoning / reasoning_content field instead of inline in content before </think>, and the tool-call parser turns the model's XML tool calls into structured tool_calls — the same flags the base model's serving recipes use.

# vLLM
vllm serve bottlecapai/ThinkingCap-Qwen3.8-27B \
  --reasoning-parser qwen3 --enable-auto-tool-choice --tool-call-parser qwen3_xml

# SGLang
python -m sglang.launch_server --model-path bottlecapai/ThinkingCap-Qwen3.8-27B --trust-remote-code \
  --reasoning-parser qwen3 --tool-call-parser qwen3_coder

Speculative decoding

Qwen's original MTP drafter as well as DFlash 2 work with ThinkingCap out of the box. Probabilistic drafting further improves their acceptance rates at the recommended temperature of 1.0, while keeping the decoding lossless. The comparison of accepted draft lengths below was measured on vLLM 0.29.0 at xhigh across AIME 2026, GPQA Diamond, LiveCodeBench, GSM8K and τ²-bench, in tokens per decoding step:

drafter top-token drafting probabilistic drafting
MTP head, 3 draft tokens 2.5–3.0 2.8–3.3
DFlash 2, 7 draft tokens 3.1–4.2 3.3–4.9

Acceptance is highest on short, predictable thinking (GSM8K) and lowest on code (LiveCodeBench), rises further at medium/low effort, and matches the base model's with both drafters. In SGLang (tested with 0.5.21), --speculative-use-rejection-sampling gives the MTP head the same gain, and DFlash 2 already samples its drafts by default.

# vLLM — with MTP self-speculative decoding
vllm serve bottlecapai/ThinkingCap-Qwen3.8-27B \
  --reasoning-parser qwen3 --enable-auto-tool-choice --tool-call-parser qwen3_xml \
  --speculative-config '{"method":"mtp","num_speculative_tokens":3,"draft_sample_method":"probabilistic"}'
# vLLM — with the DFlash 2 drafter
vllm serve bottlecapai/ThinkingCap-Qwen3.8-27B \
  --reasoning-parser qwen3 --enable-auto-tool-choice --tool-call-parser qwen3_xml \
  --speculative-config '{"method":"dflash","model":"z-lab/Qwen3.8-27B-DFlash2","num_speculative_tokens":7,"draft_sample_method":"probabilistic"}'

# SGLang — with MTP self-speculative decoding
python -m sglang.launch_server --model-path bottlecapai/ThinkingCap-Qwen3.8-27B --trust-remote-code \
  --reasoning-parser qwen3 --tool-call-parser qwen3_coder \
  --speculative-algorithm EAGLE --speculative-num-steps 3 \
  --speculative-eagle-topk 1 --speculative-num-draft-tokens 4 \
  --speculative-use-rejection-sampling
# SGLang — with the DFlash 2 drafter (drafts are sampled by default)
python -m sglang.launch_server --model-path bottlecapai/ThinkingCap-Qwen3.8-27B --trust-remote-code \
  --reasoning-parser qwen3 --tool-call-parser qwen3_coder \
  --speculative-algorithm DFLASH --speculative-draft-model-path z-lab/Qwen3.8-27B-DFlash2 \
  --speculative-num-draft-tokens 8

Querying the servers

Either server speaks the OpenAI Chat Completions API. One request covers text, images and the thinking-effort knob:

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-Qwen3.8-27B",
    messages=[{"role": "user", "content": [
        {"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}},
        {"type": "text", "text": "What is happening in this picture?"},
    ]}],
    temperature=1.0, top_p=0.95,
    extra_body={"top_k": 20,
                "chat_template_kwargs": {"reasoning_effort": "xhigh"}},   # xhigh (default) | medium | low
)
print(r.choices[0].message.reasoning)               # the thinking (`reasoning_content` on SGLang)
print(r.choices[0].message.content)                 # the answer

A text-only request is the same call with a plain string as content.

Quantized versions

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

Where to find us

Website LinkedIn Instagram X

Need even more efficiency? The open release is production-ready. Our enterprise versions go further — fewer thinking tokens still, tuned to your workload, at matched accuracy on your own tasks. Built for AI labs, inference providers and enterprises running models at scale. Deployed on your infrastructure, or in the cloud and region you choose. Talk to our team

License

ThinkingCap: PolyForm Small Business 1.0.0 + BottleCap personal-use grant (see LICENSE).

Upstream Qwen materials: Apache-2.0 (see NOTICE).

Commercial license: contact BottleCap AI.

Citation

If you use this model, please cite:

@misc{ThinkingCap-Qwen3.8-27B,
  title     = {bottlecapai/ThinkingCap-Qwen3.8-27B},
  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
2,407
Safetensors
Model size
28B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 1 Ask for provider support

Model tree for bottlecapai/ThinkingCap-Qwen3.8-27B

Base model

Qwen/Qwen3.8-27B
Finetuned
(516)
this model
Finetunes
4 models
Merges
2 models
Quantizations
33 models

Spaces using bottlecapai/ThinkingCap-Qwen3.8-27B 4

Collection including bottlecapai/ThinkingCap-Qwen3.8-27B