CaptchaKraken SunlightV2-0.8B (bf16)

Full-precision weights. The 4-bit version is CaptchaKraken/SunlightV2-0.8B-q4.

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) โ€” this repo
CaptchaKraken/SunlightV2-0.8B-q4 4-bit GPTQ (W4A16) weights, for vLLM (GPU)
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

License: LGPL-3.0.

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

Model tree for CaptchaKraken/SunlightV2-0.8B

Finetuned
(680)
this model
Quantizations
1 model

Collection including CaptchaKraken/SunlightV2-0.8B