in the image?” on COCO photos. The answer is one-hot, derived from COCO’s object boxes. It isn’t a vote distribution. noul (yes/no).
VQAv2 yes/no : COCO photos with yes/no questions, each with 10 crowd answers; questions with fewer than 8 yes-or-no answers are dropped, and the answer is the share of yes among the yes-or-no answers. noul.
VizWiz answerability (lmms-lab-encoder/VizWiz-VQA): photos taken by blind people with a spoken question; the answer is the share of 10 crowd answers that are not unanswerable. noul.
AVA (trojblue/AVA-aesthetics-10pct-min50-10bins): contest photos with at least 50 votes on a 1–10 scale; the answer is the vote shares. score, 10 levels.
KonIQ-10k : Flickr photos rated for technical quality by about 106 crowd workers each, from bad to excellent; the answer is the rating shares, from chaofengc/IQA-PyTorch-Datasets-metainfo . score, 5 levels.
Rapidata Likert (Rapidata/flux1.1-likert-scale-preference): Flux 1.1 pro images for 280 prompts, 31–45 crowd ratings each on how well the image matches the prompt. score, 5 levels.
Scores on these are agreement with the crowd’s (or the rule’s) answer distribution, not correctness against a physical truth. For a rating set, part of the KL is the sampling noise of tens to hundreds of voters, which no model can remove. Links are pinned to the measured revisions; Setup has the splits, sizes and licences.
Results
Each decision has a question type: choice (one of N labels), noul (yes/no), score (ordered levels). A temperature T rescales each decision’s probabilities as pi 1/T / Σj pj 1/T ; one T per question type, no per-class temperature. T = 1 is the server’s output (“raw”). Numbers are stock-nvfp4 and swift-nvfp4. Scores are KL from the dataset’s answer distribution (lower is better) on test, mean of three passes (Rapidata pairs: one pass). Fits minimise mean cross-entropy to the answer distribution on validation.
Does it answer? Raw, pass 1, /v1/systemone. Accuracy is the top answer against the answer distribution’s top option (POPE: the rule’s answer):
Scored on Type Decisions Accuracy (stock / Swift) Raw KL (stock / Swift) CIFAR-10H choice, 10 2,000 0.912 / 0.915 0.264 / 0.320 soft-digits choice, 11 830 0.720 / 0.780 0.798 / 0.798 Rapidata pairs choice, 2 1,500 0.591 / 0.612 0.415 / 0.478 POPE noul 3,600 0.888 / 0.889 0.348 / 0.401 VQAv2 yes/no noul 2,349 0.874 / 0.876 0.311 / 0.380 VizWiz answerability noul 2,000 0.794 / 0.798 0.315 / 0.396 AVA score, 10 2,000 0.270 / 0.131 0.885 / 1.570 KonIQ-10k score, 5 2,000 0.381 / 0.469 0.851 / 0.952 Rapidata Likert score, 5 528 0.436 / 0.326 1.353 / 2.301
Do image temperatures transfer? Columns: own fit is T fitted on the set’s own validation. Pooled images is one fit over the validation splits of every other image set (the set is never in its own pool; decisions are pooled within each question type, so only sets with the same type matter; Rapidata pairs is not in the pool). Pooled text is one fit over the six text sources of the text post . KL, mean of three passes:
Stock NVFP4:
Scored on Raw Own fit Pooled images Pooled text CIFAR-10H (choice) 0.264 0.255 0.255 0.386 soft-digits (choice) 0.798 0.768 0.767 0.917 POPE (noul) 0.347 0.270 0.270 0.302 VQAv2 (noul) 0.313 0.187 0.190 0.207 VizWiz (noul) 0.315 0.259 0.260 0.281 AVA (score) 0.885 0.517 0.522 0.537 KonIQ-10k (score) 0.851 0.578 0.636 0.582 Rapidata Likert (score) 1.353 0.087 0.220 0.357 Rapidata pairs (choice, 1 pass) 0.415 0.046 0.329 0.137
Swift 1.5 NVFP4:
Scored on Raw Own fit Pooled images Pooled text CIFAR-10H (choice) 0.320 0.268 0.267 0.346 soft-digits (choice) 0.798 0.654 0.655 0.743 POPE (noul) 0.402 0.276 0.277 0.327 VQAv2 (noul) 0.380 0.188 0.189 0.220 VizWiz (noul) 0.396 0.268 0.268 0.291 AVA (score) 1.570 0.517 0.518 0.614 KonIQ-10k (score) 0.952 0.491 0.608 0.498 Rapidata Likert (score) 2.301 0.092 0.268 0.568 Rapidata pairs (choice, 1 pass) 0.478 0.047 0.261 0.134
Rapidata pairs (one pass) isn’t in the chart.
Fitted temperatures (stock-nvfp4 / swift-nvfp4, mean of three passes; Rapidata pairs one pass):
Source Type Stock Swift CIFAR-10H choice 1.18 1.49 soft-digits choice 1.17 1.51 Rapidata pairs choice 14.98 12.54 POPE noul 2.04 2.61 VQAv2 noul 2.39 2.79 VizWiz noul 1.96 2.42 AVA score 3.76 5.87 KonIQ-10k score 2.90 3.25 Rapidata Likert score 11.85 19.59
Does the model carry anything beyond a constant guess? Pass 1, test, KL from the answer distribution (lower is better). Constant is the validation split’s mean answer distribution used for every case, uniform equal probability on every option, ρ the Spearman correlation between the model’s expected rating (probability-weighted level, raw) and the voters’ mean rating. Stock / Swift (mean ratings: stock, then Swift):
Scored on Own fit Constant Uniform ρ Mean rating: raw / after own fit / voters CIFAR-10H 0.255 / 0.268 2.153 2.146 - - soft-digits 0.768 / 0.654 1.870 1.946 - - Rapidata pairs 0.046 / 0.047 0.049 0.049 - - POPE 0.269 / 0.277 0.693 0.693 - - VQAv2 yes/no 0.187 / 0.188 0.480 0.480 - - VizWiz answerability 0.259 / 0.268 0.317 0.388 - - AVA 0.517 / 0.517 0.162 0.588 0.457 / 0.389 6.71 / 6.05 / 5.37 and 6.75 / 5.94 / 5.37 KonIQ-10k 0.578 / 0.491 0.334 0.764 0.791 / 0.790 3.45 / 3.20 / 3.16 and 3.38 / 3.18 / 3.16 Rapidata Likert 0.087 / 0.092 0.085 0.107 0.458 / 0.368 4.10 / 3.20 / 3.23 and 3.94 / 3.17 / 3.23
Rapidata pairs, position of the answer (test, pass 1): the stock config answers Image 2 on 0.735 of the 1,500 pairs (mean P(Image 2) 0.683) and Swift on 0.448 (0.475), while the voters’ mean share for Image 2 is 0.503. The image order is randomised per pair. 8.7% of the pairs have a tied gold, which the scorer counts as a hit for either answer, so a random side scores 0.544 (always Image 1 0.549, always Image 2 0.539) rather than 0.500.
Takeaways
The decision API works on images, on both checkpoints and both routes. The image goes in the request’s top-level images list as a data URL, next to the state and question, and the answer is a probability distribution, as on text. Both checkpoints are Qwen3_5ForConditionalGeneration with a vision_config; I added no separate encoder. The top answer matches the crowd’s or the rule’s top option on 0.912 / 0.915 of CIFAR-10H images (10 classes), 0.888 / 0.889 of POPE questions and 0.874 / 0.876 of VQAv2 yes/no questions (stock / Swift). On the 5- and 10-level rating sets accuracy is 0.13–0.47 against a chance of 0.10 or 0.20. On CIFAR-10H, /v1/decisions returned probabilities identical to /v1/systemone’s (mean and max |Δp| 0 on 3,000 images per config, both configs). On POPE they differ by a mean |Δp| of 0.015–0.017 and 19–60 top answers of 1,800 or 3,600, against 21–57 changed between pass 1 and pass 2 of /v1/systemone on the same splits. The other seven sets ran through /v1/systemone only.
For yes/no and 10- or 11-option image sets, a fit on the other image sets came within 0.003 KL of the set’s own. On these five fixed test sets, the pooled-images KL is within 0.003 of the own fit on CIFAR-10H, soft-digits, POPE, VQAv2 and VizWiz, both configs (largest: VQAv2, stock, 0.190 vs 0.187), which is 98–103% of the own fit’s gain computed from the table’s values. This is not an equivalence test: no interval over sampled images or launches. The noul temperatures from images (1.96–2.39 stock, 2.42–2.79 Swift) are lower than those from the text sources of the text post (2.92–3.83 and 4.08–5.08, except LeWiDi ’s 1.58 and 2.05).
Text-fitted choice temperatures made images worse. The pooled text fit is worse than raw on CIFAR-10H for both configs (0.386 vs 0.264 stock, 0.346 vs 0.320 Swift) and on soft-digits for stock (0.917 vs 0.798); Swift soft-digits improves (0.743 vs 0.798). The image choice temperatures are 1.17–1.18 (stock) and 1.49–1.51 (Swift); the text sources’ are 1.35–3.11 and 1.47–3.71. Text noul and score fits did help: pooled text beats raw on the other 13 of 16 set-config cells, and keeps 58–84% of the own fit’s gain on the three noul sets. Why choice fails wasn’t tested; one reading is that image probabilities are closer to calibrated than the text ones, so softening them as much as text needs hurts.
score transfers between photo sets with a gap. AVA, KonIQ-10k and Rapidata Likert all beat raw under every other image fit, by a lot where raw is overconfident (Swift AVA 1.570 → 0.518). The pooled-images fit keeps 99–100% of the own fit’s gain on AVA, 75–79% on KonIQ-10k (0.636 vs 0.578 stock, 0.608 vs 0.491 Swift) and 89–92% on Likert. The pool for KonIQ-10k holds AVA and Likert; a fit on AVA alone gives KonIQ-10k 0.589 (stock) and 0.540 (Swift), and Likert’s score temperature (11.85, 19.59) is far above the photo sets’ (2.90–5.87). The pooled text fit is closer to the own fit on KonIQ-10k (0.582 stock, 0.498 Swift) than the pooled image fit is.
A fitted temperature moves the mean rating toward the voters’ but doesn’t reach the constant guess’s KL on AVA and KonIQ-10k. The own fit is worse than the constant: 0.517 vs 0.162 and 0.578 vs 0.334 (stock; Swift also loses to the constant), although the model’s ordering of the photos is real (ρ 0.46 and 0.79 stock). The raw mean rating is higher than the voters’ on all three score sets (AVA 6.71 vs 5.37); after the own fit it is 6.05 on AVA, 3.20 vs 3.16 on KonIQ-10k and 3.20 vs 3.23 on Likert (stock). The fitted aggregate mean is close on KonIQ-10k and Likert, yet their full distributions still have higher KL than the constant on KonIQ-10k (and AVA); I did not separate per-image shifts from other shape errors.
Rapidata pairs and Likert: the ordering is real, the distribution gains little over a constant. The pairs own fit (T = 14.98 stock, 12.54 Swift) flattens every answer to nearly 50/50: KL 0.046 / 0.047 against 0.049 for a uniform or constant guess, from 0.415 / 0.478 raw. Likert’s own fit is 0.087 / 0.092 against 0.085 for the constant. What is left is order: the top answer matches the majority side on 0.591 / 0.612 of 1,500 pairs, against 0.544 for a random side once tied pairs count as hits for either answer (the pairs share prompts, so I give no interval), and ρ on Likert is 0.458 / 0.368 over 528 images. The stock config also answers Image 2 on 73.5% of pairs, a side preference, where the voters’ share is 0.503, so its 0.591 is not a clean measure of visual preference.
The Rapidata pairs temperature transfers badly. Applied to CIFAR-10H and soft-digits it gives KL 1.711 and 1.737 (stock; 1.537 and 1.598 Swift), against raw 0.264 and 0.798. With pairs in the pool, pooled images for stock CIFAR-10H is 0.289 (vs 0.255 without) and for stock soft-digits 0.824, worse than raw. In the other direction, a fit on the other two choice sets improves pairs only part of the way (0.329 stock, 0.261 Swift, against 0.046 / 0.047 own).
Swift’s raw KL is higher than stock’s on 8 of 9 sets (soft-digits ties at 0.798), by the most on Rapidata Likert (2.301 vs 1.353). After the own fit the two are equal on AVA (0.517) and within 0.013 on CIFAR-10H, POPE, VQAv2, VizWiz, Likert and Rapidata pairs, with stock lower; Swift is lower on soft-digits (0.654 vs 0.768) and KonIQ-10k (0.491 vs 0.578). These are descriptive differences without intervals.
Within each set’s server session, soft-digits, AVA, KonIQ-10k, VizWiz and Likert answers were bit-identical across the three passes; VQAv2 changed 6 (stock) and 12 (Swift) top answers between pass 1 and 2, and POPE 21–57. The largest spread of any image cell in the transfer file is 0.004 KL.
At 100 labeled cases, a fit kept at least 0.88 of the full fit’s gain in the median draw on every set and config, and at least 0.87 in the worst of 20 draws on 15 of 18 cells. The three below that are stock CIFAR-10H, soft-digits and VizWiz. Learning curve below.
How many labeled cases
For each image set, T per type was fitted on n cases drawn at random from the validation split (20 draws per n, pass 1) and scored on the same test split as above. Cells: median share of the full-split fit’s gain over raw, with the worst of the 20 draws in parentheses. Below 0 is worse than raw. n counts cases: one image for most sets, one image with one setting (six questions) for POPE, about 2.4 questions of one image for VQAv2 and one pair of two images for Rapidata pairs. A POPE draw can hold the same photo under different settings.
Set (fit split, cases) Config n = 25 n = 50 n = 100 n = 200 CIFAR-10H (validation, 1,000) stock 0.64 (-1.67) 0.86 (-0.21) 0.88 (0.56) 0.99 (0.04) Swift 0.95 (0.55) 0.99 (0.75) 0.98 (0.93) 1.00 (0.82) soft-digits (validation, 830) stock 0.87 (0.18) 0.99 (0.33) 0.98 (0.55) 0.98 (0.19) Swift 0.99 (0.84) 1.01 (0.87) 1.00 (0.93) 1.00 (0.91) POPE (validation, 300) stock 0.98 (0.87) 1.00 (0.95) 1.00 (0.97) 1.00 (0.99) Swift 0.98 (0.84) 0.99 (0.90) 1.00 (0.98) 1.00 (0.99) VQAv2 (validation, 500) stock 0.99 (0.89) 1.00 (0.95) 1.00 (0.96) 1.00 (0.99) Swift 0.99 (0.88) 1.00 (0.97) 1.00 (0.99) 1.00 (1.00) VizWiz (validation, 1,000) stock 0.92 (0.20) 0.98 (0.65) 0.95 (0.64) 1.00 (0.90) Swift 0.95 (0.67) 0.99 (0.82) 0.99 (0.87) 1.00 (0.98) AVA (validation, 1,000) stock 0.99 (0.95) 1.00 (0.99) 1.00 (0.99) 1.00 (1.00) Swift 1.00 (0.99) 1.00 (0.99) 1.00 (0.99) 1.00 (1.00) KonIQ-10k (validation, 1,000) stock 0.99 (0.93) 0.99 (0.95) 1.00 (0.99) 1.00 (0.99) Swift 0.99 (0.94) 1.00 (0.98) 1.00 (0.99) 1.00 (0.99)
At n = 25 the median is at least 0.87 on every set and config except stock CIFAR-10H (0.64); the worst draw is the risk: stock VizWiz 0.20, stock soft-digits 0.18, stock CIFAR-10H −1.67.
At n = 100 the worst draw is at least 0.87 on 15 of the 18 cells. The exceptions are stock CIFAR-10H (0.56), stock soft-digits (0.55) and stock VizWiz (0.64). At n = 200 it is at least 0.90 on 15 cells; the exceptions are both CIFAR-10H configs (0.04 stock, 0.82 Swift) and stock soft-digits (0.19).
The 10- and 11-option classification sets are the volatile ones because their gain is small: raw to full fit is 0.264 → 0.255 on stock CIFAR-10H (0.009 KL) and 0.798 → 0.768 on stock soft-digits. At n = 100 the median draw is within 0.0010 KL of the full fit on both; the worst draw comes back only at n = 500 (0.90 and 0.86).
Rapidata pairs and Rapidata Likert read 1.00 (worst draw 0.97–1.00) at every n in both configs, because their fit just flattens the answers toward a constant, which a few cases determine. POPE and VQAv2 have no n = 500.
Fitting temperatures to your own image data
What the data supports for models like these two:
Try 100–200 labeled cases and fit T per question type, then check how stable the fit is on your own draws. On POPE, VQAv2, AVA, KonIQ-10k and Likert the worst of 20 draws kept at least 0.84 of the full-fit gain at n = 25 and at least 0.96 at n = 100. VizWiz needed more (worst draw 0.64 at n = 100 on stock, 0.90 at n = 200). On the 10- and 11-option classification sets, which gain only 0.009–0.030 KL on stock, the worst stock draws were 0.04–0.56 at n = 100–200. These are starting sizes for sets like these nine, not a guarantee for a new one.
Score on cases the fit didn’t use, and compare against a constant. A fitted model that beats raw can still lose to the validation split’s mean answer distribution (AVA, KonIQ-10k), and then the fitted distribution is not the useful output; the model’s ordering may still help (ρ 0.46–0.79).
Don’t reuse text temperatures for image choice. They made CIFAR-10H worse than none for both configs. Image noul and score fits from text helped.
With no target labels but labeled image sources, a pooled fit is an option to test. Fit on the other sources’ labeled decisions within each question type, and check each source against a constant before including it. Pooling came within 0.003 KL of the own fit on noul and 10- or 11-option choice here and left a gap on score. A source whose own fit only flattens its answers (Rapidata pairs) transfers badly (worse than raw on CIFAR-10H and soft-digits). Validate the transferred temperature once target labels exist.
Apply it in the client, or per request. /v1/decisions accepts a per-request temperature and /v1/systemone refuses it, per the SGLang decision docs . Scaling the returned probabilities as p1/T and renormalising does the same either way.
These are two related Qwen3.8-27B NVFP4 checkpoints and nine image sets (photos, small handwritten digits, generated images). They say nothing about other model families, other precisions, or image content such as documents or screenshots.
Setup
Serving stack:
Image: lmsysorg/sglang:nightly-dev-cu13-20261010-961bcf48.
Checkpoints: RadixArk/Qwen3.8-27B-NVFP4 @ 319f741c (“stock NVFP4”) and ukisai/Swift-1.5-Qwen3.8-27b-NVFP4 @ 25482027 (“Swift 1.5 NVFP4”; ModelOpt mixed, no KV scales). Both config.json files list Qwen3_5ForConditionalGeneration with a vision_config (27 layers, hidden size 1152), and both index files hold 333 model.visual.* tensors.
Same flags as the text post , --mem-fraction-static 0.41, no speculative decoding.
python3 -m sglang.launch_server --model-path <checkpoint>
--mem-fraction-static 0.41 --max-running-requests 4 --context-length 153600
--dtype auto --attention-backend flashinfer
--reasoning-parser qwen3 --tool-call-parser qwen3_coder
--mamba-full-memory-ratio 0.9 --mamba-ssm-dtype bfloat16
--mamba-radix-cache-strategy extra_buffer_lazy
--chunked-prefill-size 2048 --page-size 64
--enable-hierarchical-cache --hicache-size 64 --hicache-write-policy write_through
--kv-cache-dtype fp8_e4m3 --schedule-policy lpm --enable-session-radix-cache
--sleep-on-idle --trust-remote-code
Protocol:
/v1/systemone, one request in flight, three passes per set (Rapidata pairs: one pass). A set’s passes share one server session; pass 1 precedes the repeated passes, and passes 2 and 3 can reuse cached prefixes. Thinking off, as the decision API does. Each case carries its image(s) as data URLs in the request’s top-level images list, next to the state (/v1/systemone) or input (/v1/decisions) with the question and options. The client converts non-RGB images to RGB PNG (two grayscale POPE validation images had crashed the stock run with HTTP 500; stock POPE validation was rerun with the same flags).
Route check: a separate server launch per config, one /v1/systemone pass, then one /v1/decisions pass over the same CIFAR-10H and POPE splits.
Datasets, all images, each a fixed sample or upstream split with validation fitting and test scoring:
MKZuziak/cifar10h @ 0ec71d3e (MIT per the CIFAR-10H card): 1,000 validation and 2,000 test images, sent as they are (32x32).
majapavlo/image-level-soft-label-digits @ 3f231e9a (CC BY-SA 4.0): upstream val and test, 830 + 830 images, answer soft_label_yes_unc_equal.
Rapidata/human-style-preferences-images @ 0b9a8d94 (CDLA-Permissive-2.0): the first 3 of 53 shards, halves by prompt, 1,000 validation + 1,500 test pairs, image order set by a hash of the pair.
lmms-lab-encoder/POPE @ 4db12766 (no licence on the POPE card): a case is one image and one setting (random, popular or adversarial) with 6 questions; 300 validation (1,800 decisions), 600 test (3,600).
lmms-lab-encoder/VQAv2 @ 32665d35 (CC BY 4.0 per the VQAv2 mirror’s card): first 6 of 68 validation shards, yes/no questions with at least 8 yes-or-no answers, the 30 images that are also POPE’s left out; halves by image; 500 validation images (1,207 questions) and 1,000 test images (2,349).
lmms-lab-encoder/VizWiz-VQA @ d428a2da (no licence on the VizWiz mirror’s card; the original is CC BY 4.0 per vizwiz.org, checked 2026-10-31): 1,000 validation + 2,000 test.
trojblue/AVA-aesthetics-10pct-min50-10bins @ ee09ff2b (no licence on the AVA subset’s card, which defers to the original AVA terms): 1,000 + 2,000 images.
xyliu6/koniq10k-1024x768 @ e06f08f3 (CC BY 4.0 for the set, each image under its own CC licence) with labels from chaofengc/IQA-PyTorch-Datasets-metainfo @ 4ee2b4f8 (CC BY-SA 4.0): the official val (1,000 images) fits, a fixed sample of 2,000 of the official test is scored.
Rapidata/flux1.1-likert-scale-preference @ a490293a (no licence on the Rapidata Likert card): halves by prompt, 596 validation + 528 test images.
Transfer and learning curve: each image source is fitted on its validation split with one T per question type it has; the text sources are fitted as in the text post (Typed Decisions train, all of TD Bench, validation for the other four); a cell is - in transfer.md where the source has none of the target’s types. transfer.py fits per pass and the table cells are means over the three passes. Learning curve: learning_curve.py, pass 1, 20 random draws per n.
Caveats
Route parity was checked on two of nine sets. CIFAR-10H and POPE ran through both routes; the seven newer sets ran through /v1/systemone only. The POPE difference matches the pass-to-pass difference of /v1/systemone, but the native pass wasn’t compared with a second /v1/systemone pass in the same session, so I read it as the same prefix-cache effect without having isolated it.
POPE’s answer is a rule, not a vote. One-hot yes/no from COCO’s object boxes, so its KL rewards confidence and isn’t comparable with the other columns. Its fitted noul temperature (2.04) sits next to VQAv2’s (2.39) and VizWiz’s (1.96), whose answers are vote shares.
KL against rating distributions includes vote noise. AVA, KonIQ-10k and Likert answers come from tens to hundreds of voters; the model can’t beat that sampling noise, so absolute KLs on those sets are not model errors alone. The model and the constant are scored against the same votes, so the target’s entropy cancels in their KL difference, but vote-sampling uncertainty remains and I computed no intervals.
Rapidata pairs: one pass, my question wording, a side preference. It is the only set missing from the three-pass file, its pooled-images row comes from the pass-1 file, and the question text is mine. The stock config’s Image 2 preference means its 0.591 accuracy isn’t a clean preference measure. I didn’t swap the order of the same pair to test it.
Rapidata Likert has no stated licence on the Rapidata Likert card, so only aggregates are published (tables and summary.json files), not per-image answer files. The published files can’t regenerate Likert’s rows and columns or the pooled images fits that include it; those need Likert inference rerun.
Pretraining overlap. MNIST, CIFAR-10, COCO, Flickr and AVA photos are probably in the models’ training data [unverified]. I didn’t check. Rapidata’s generated images are the least likely to be.
Swift versus stock is a descriptive comparison. No intervals on the differences between configs, and the temperature fits come from one launch per config.
Fit size results are for these nine sets. Draws come from fit splits of 300–1,000 cases (n = 500 covers 50–84% of a split where it exists), percentiles are over draws, and shares for the 10- and 11-option classification sets are noisy because their gains are small.
Two NVFP4 configs only , one image and one set of flags. BF16, FP8 and other models weren’t run here.
Raw data
Scripts, configs and raw results: adcostanza/benchmarks . The README sections “More image sets”, “Route parity on images” and “How many labeled images” hold the question, rerun commands and caveats.
To rerun with the scripts as these runs had them, check out 5fdbeb1.
results-vision/<config>/<set>-<split>/: every raw answer (pass1.jsonl, pass2.jsonl, pass3.jsonl) and summary.json, for every set except Rapidata Likert (no licence: its summary.json files only) and with one pass for Rapidata pairs. results-vision-native/: the route check.
results-vision/transfer.md (three passes, every cell with [min, max]) and transfer-pass1.md (pass 1, with Rapidata pairs). baselines.md : constant and uniform guesses, ρ, mean ratings, position. learning_curve.md : every n for every set.
Code: transfer.py , baselines.py and learning_curve.py .
Test system
GPU: NVIDIA RTX PRO 6000 Blackwell Workstation Edition, 96 GB, power limit 400 W (default 600 W). Nothing else on the GPU, one config at a time.
PCIe: Gen 4 x16 (the card supports Gen 5; nvidia-smi reports Gen 4 as this system’s maximum).
CPU: AMD Ryzen 9 7950X, 16 cores, 32 threads.
RAM: 250 GiB DDR5.
OS: Ubuntu 24.04.2, kernel 6.8.0-147.
NVIDIA: driver 580.178.04, CUDA 13.0.
Containers: rootless Docker 28.0.4, NVIDIA Container Toolkit 1.18.1, GPU through CDI.
Full list: hardware.md at the commit these runs used.