CaptchaKraken SunlightV2-0.8B-q4 (GPTQ W4A16)

4-bit weights (0.9 GiB, against 1.6 GiB in bf16), in compressed-tensors format, which vLLM loads natively. Full precision is CaptchaKraken/SunlightV2-0.8B.

Quantised with llm-compressor 0.12: GPTQ, W4A16, group 128, symmetric, static act-order, calibrated on 256 of our own training-split boards (56 videos, 163 puzzle types; the gate set excluded). Kept in bf16: the vision tower, embeddings, lm_head, the pointer heads, and the Gated DeltaNet in_proj_a / in_proj_b. The full recipe is in recipe.yaml. An AWQ+GPTQ variant was also measured and came out worse (98.3% recovery), so it is not published.

The Sunlight V2 family (0.8B)

Sunlight V2 is the 0.8B CaptchaKraken v2 pointer model. Every repo below holds the same trained model:

Repo What
CaptchaKraken/SunlightV2-0.8B merged bf16 weights, for vLLM (GPU)
CaptchaKraken/SunlightV2-0.8B-q4 4-bit GPTQ (W4A16) weights, for vLLM (GPU) โ€” this repo
CaptchaKraken/SunlightV2-0.8B-LoRA unmerged LoRA adapter + pointer heads, for further training
CaptchaKraken/SunlightV2-0.8B-GGUF llama.cpp builds (Q4_K_M, BF16, mmproj), for CPU

The other v2 pointer families: Twilight V2 (2B, CaptchaKraken/TwilightV2-2B), Midnight V2 (4B, CaptchaKraken/MidnightV2-4B). The numbered element marks come from the v2 CNN element detector, CaptchaKraken/CaptchaKrakenV2-CNN-large (CPU-lite build: CaptchaKraken/CaptchaKrakenV2-CNN-lite).

What this is

The generation-3 pointer model: Qwen/Qwen3.5-0.8B, LoRA-trained (rank 16, merged) with small heads (pointer_heads.safetensors) that read the whole answer (action, points, drags, text, video moment) from one prefill of the prompt. There is no text generation. vLLM runs it as a pooling model through the CaptchaPointerForConditionalGeneration plugin.

  • Training run 20261030-100636-qwen-0.8b: 43,963 boards, 1 epoch, lr 1e-4 (heads 1e-3), accum 8, half the boards drawn with numbered element marks.
  • Prompt: the fixed single prompt ("every captcha is asked the same prompt").

Loading it (read this first)

These heads match client commit ef2ec28 of CaptchaKraken exactly. A later client's heads (the offset/element head changes of 2026-10-30) will refuse them. Apply client-fixes.patch (in this repo) on top of ef2ec28 before serving with vLLM 0.25.1. It fixes two serving bugs found on 2026-11-01:

  1. Every video request failed: the prompt sent a bare <|video_pad|>, and vLLM expands only the full <|vision_start|><|video_pad|><|vision_end|>.
  2. A prompt vLLM had already cached (e.g. a marked board with nothing detected) came back with hidden states for its uncached tail only, and the heads indexed past the end. Prefix caching is now off.
from captchakraken.pointer.service import PointerService   # client ef2ec28 + client-fixes.patch
svc = PointerService("<this repo, downloaded>", detector="detector_r18.v3.pt")
svc.solve(image=pil_image, marked=True)      # or frames=[...] for a clipvideo-cut video

Gate results (Tier 2 gate set, 1,067 hand-labelled real boards, served through vLLM 0.25.1)

Solved rate, plain / marked:

bf16 GPTQ W4A16
All 53.5% / 51.3% 53.9% / 50.8%
Click (674) 60.4 / 58.5 61.6 / 58.8
Grid (223) 31.8 / 26.0 29.6 / 22.9
Video (158) 56.3 / 57.6 57.0 / 57.0
Type (12) 33.3 / 25.0 33.3 / 37.5

GPTQ keeps 99.9% of bf16's solved boards (31 lost, 30 gained of 2,129 answers; same action on 2,128; point shift p50 0, p90 0). Grids are where 4-bit costs something (-2 to -3 points). Per-board results are in eval/.

Results across the family

This model is in the 0.8B q4 column. The bold heading marks this size.

Every v2 pointer size, on the same 1,067 hand-labelled real boards, served through vLLM 0.25.1 on an RTX 5080. Percent of boards solved; higher is better. q4 is 4-bit GPTQ (W4A16); the others are bf16.

Plain (the bare board):

0.8B 0.8B q4 2B 4B 4B q4
All (1,067) 53.5% 53.9% 72.6% 75.4% 75.1%
Click (674) 60.4 61.6 76.3 78.3 77.9
Grid (223) 31.8 29.6 75.8 78.9 78.9
Video (158) 56.3 57.0 54.4 59.5 59.5
Type (12) 33.3 33.3 50.0 50.0 50.0

Marked (the CNN detector's numbered marks drawn on the board), stills only, on the boards all five runs marked:

0.8B 0.8B q4 2B 4B 4B q4
All (904) 50.2% 49.8% 70.5% 71.6% 71.0%
Click (673) 58.5 58.8 73.3 73.7 73.6
Grid (223) 26.0 22.9 62.3 65.5 63.7
Type (8) 25.0 37.5 62.5 62.5 62.5
  • 2B solves about 19 points more than 0.8B on the plain boards, split about evenly between clicks and grids. Grids are the sharpest jump (31.8 to 75.8). 4B adds about 3 more.
  • Video barely follows size: 0.8B is ahead of 2B there, and 4B leads by about 3 points.
  • 4-bit moves the totals by less than a point. Its largest cost is on marked grids (2 to 3 points). A 2B q4 has not been measured or published.

How far to trust the gaps:

  • The 0.8B was trained on an earlier build of the data (2026-10-30), so not all of its gap is model size.
  • Compare sizes on the plain table. Marked scores also depend on the detector, and the 4B card names a different detector checkpoint from the 0.8B and 2B cards.
  • The 4B run did not score marked video, so marked video is left out for every size. That is why these marked totals differ from the ones quoted elsewhere on the cards, which cover different board sets.
  • Type has only 12 boards plain and 8 marked, so treat those rows as rough.
  • MidnightV2-4B's own gate results were run through transformers, so use this table, not those, to compare it with the other sizes.

Per-board results: 0.8B, 0.8B q4, 2B, 4B, 4B q4.

License: LGPL-3.0.

Downloads last month
2
Safetensors
Model size
0.9B params
Tensor type
I32
ยท
BF16
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for CaptchaKraken/SunlightV2-0.8B-q4

Quantized
(404)
this model

Collection including CaptchaKraken/SunlightV2-0.8B-q4