Benchmark v1.0 · report
pi/rtx5090/deepseek-v4.1-flash-coder-iq2_xxs-strata0210-256k
setup
- model type
- open model (local)
- GPU
- RTX 5090
- harness
- pi
- model
- deepseek-v4.1-flash-coder-iq2_xxs-strata0210-256k
- VRAM
- 32 GB
- RAM
- 64 GB
- inference engine
- Strata
started 2026-11-03 13:55 UTC
overall
Answered 9 of 18 challenges; 9 correct.
9 of 18 challenges passed
partial run · 9 unanswered, counted against the score
- 9 passed
- 9 not answered
vitals
time
9m 57s
answered
50%
failed
0%
success
50%
systems
Hard coding test v2
9/18 passed · 9 unanswered
fix-one-1✓ pass18s
prompt
Download airbench.ai/f/650bf5cdfd0317ed51dfde23c5523771.zip and unzip it. It contains one Python file with a unit test file (Python 3.10 or newer, standard library only). One test fails because of a bug. Fix the bug, then run the Python file that is not the test file (`python <name>.py`) inside the folder and respond with just the 8-character code it prints after `checksum`.answer
answer hidden on shared reportsagent's debrief
Routine debugging: the failing test showed without_lowest mutated the caller list because it sorted in place. Replacing scores.sort() with scores = sorted(scores) fixed it, tests then pass, and the checksum is 563e44fc.
trace-1✓ pass1m 50s
prompt
What exactly does this JavaScript program print? Run it in your head or in any JavaScript engine (non-strict mode). Respond with just the printed output. function* v1gen() { for (let i = 1; i <= 6; i++) yield i * 3; } const v1it = v1gen(); const v1head = []; for (let i = 0; i < 1; i++) v1head.push(v1it.next().value); const v1ret = v1it.return(93); const v1 = v1head.join("+") + "|" + v1ret.value + "|" + v1ret.done + "|" + [...v1it].length; const v2 = Object.keys({6: 1, b: 1, c: 1, 10: 1, 58: 1}).join(","); function* v3gen() { try { yield 8; } catch (e) { yield e + 11; } yield 28; } const v3it = v3gen(); v3it.next(); const v3x = v3it.throw(118).value; const v3y = v3it.next(); const v3 = v3x + "," + v3y.value + "," + v3it.next().done; let v4 = ""; outer: for (let i = 0; i < 4; i++) { for (let j = 0; j < 4; j++) { if (j === 2) continue outer; v4 += i * 10 + j + " "; } v4 += "|"; } const v5a = []; const v5b = []; for (let i = 0; i < 3; i++) v5a.push(() => i * 2); for (var v5j = 0; v5j < 3; v5j++) v5b.push(() => v5j * 2); const v5sum = (fs) => fs.reduce((s, f) => s + f(), 0); const v5 = v5sum(v5a) + "/" + v5sum(v5b); console.log(v1, v2, v3, v4, v5);answer
answer hidden on shared reportsagent's debrief
I ran it in Node and checked generator return/throw semantics and var-vs-let closures.
spec-impl-1✓ pass37s
prompt
Specification: version comparison. Write a function that compares two version strings a and b. Each version is one or more non-negative integers (no leading zeros) joined by `.`, optionally followed by one pre-release suffix: `-rc` and then an integer N, written directly after the last number (for example `2.0-rc7`). The rc in the suffix is always lowercase; N has no leading zeros. Rules, applied in this order: 1. Compare the numeric parts from left to right as integers, not as text (1.10 is greater than 1.9). The first difference decides, and the suffix is ignored in this step. 2. If all the parts the two versions have in common are equal but one has more parts: The version with fewer numeric parts is the lesser one, even if the extra parts of the other are 0 (so 1 is less than 1.0). If this rule decides the comparison, the suffixes are ignored. 3. If the numeric parts are equal after steps 1 and 2, a version with a pre-release suffix is less than the same version without one. If both have a suffix, compare their N values as integers. If neither has a suffix, or both have the same N, the versions are equal. For each input line, which holds two versions `a b` separated by one space, output `<` if a is less than b, `=` if they are equal, or `>` if a is greater than b. The 15 inputs, one per line: 1.0 1 1.10 1.9 2.0-rc1 2.0 2.0-rc10 2.0-rc9 12-rc5 12.0-rc5 10.12 10.12-rc2 4 4 6.11.1 6.11.1.0.0 8.10 8.8 1.0-rc7 1-rc7 11.3.11 11.3.11-rc7 9.5 9.5-rc10 1 1-rc7 1 1-rc10 8.4-rc9 8.4 Implement it in any language you like and respond with exactly 15 lines: the result for each input, in order. One result per line, nothing else (no numbering, no commentary).answer
answer hidden on shared reportsgrader
15/15 lines match
agent's debrief
Straightforward once I carefully separated the three rules; the tricky cases were versions with extra zero parts and the rule that suffixes are ignored when lengths decide. I implemented it and cross-checked all 15 lines.
issue-crash-1✓ pass19s
prompt
Download airbench.ai/f/f59268f227bfb8088a66148e1f34c403.zip and unzip it. It is a small Python project (Python 3.10 or newer, standard library only). A user filed this issue: > **`python main.py data/real.csv` crashes** > We just started selling in a new region, and the README says any region without its own rate gets 17%. > ``` > Traceback (most recent call last): > File "/home/user/sales/main.py", line 22, in <module> > main() > File "/home/user/sales/main.py", line 13, in main > orders = group_orders(rows) > File "/home/user/sales/shop/order_book.py", line 42, in group_orders > settle_order(order) > File "/home/user/sales/shop/order_book.py", line 26, in settle_order > order.tax = order_tax(order.lines, order.region) > File "/home/user/sales/shop/duties.py", line 18, in order_tax > rate = rate_for(region) > File "/home/user/sales/shop/duties.py", line 14, in rate_for > return RATES[region] > KeyError: 'LATAM' > ``` Fix the bug so the program follows its README, then run `python main.py data/real.csv` inside the project folder and respond with just the 8-character code it prints after `checksum`.answer
answer hidden on shared reportsagent's debrief
Easy fix: rate_for looked up RATES[region] and crashed for LATAM, while the README says any unlisted region gets 17%. I changed it to RATES.get(region, DEFAULT_RATE), verified sample checksum still matches, and ran real.csv for d180b0ba.
issue-feature-1✓ pass1m 31s
prompt
Download airbench.ai/f/96f227f5506cd5b97987436b87c0bfb1.zip and unzip it. It is a small Python project (Python 3.10 or newer, standard library only). A user filed this feature request: > **Make more categories tax-exempt from the command line** > > Please add an option `--exempt` that takes a comma-separated list of categories that are tax-exempt in addition to books, for example `--exempt General,toys`. Category names on the command line are case-insensitive, like categories in the file. Books stay exempt. Without the option nothing changes. > > For example, with this `example.csv`: > > ```csv > order_id,ts,customer,region,sku,qty,unit_price,currency,category > E5120,2026-03-14T10:00:00Z,c650,EU,HM-402,1,6.00,EUR,general > E5120,2026-03-14T10:00:00Z,c650,EU,TY-233,2,6.00,EUR,toys > E5120,2026-03-14T10:00:00Z,c650,EU,BK-115,3,6.00,EUR,books > ``` > > `python main.py example.csv --exempt General,toys` should print these report lines (before the checksum): > > ``` > period: 2026-03..2026-03 > EU 2026-03 EUR orders=1 gross=36.00 rate=15% last=E5120 > ``` > > Today it prints: > > ``` > period: 2026-03..2026-03 > EU 2026-03 EUR orders=1 gross=38.70 rate=15% last=E5120 > ``` The checksum the README gives for `data/sample.csv` describes the program as it is today; once the request is implemented, the program's output (and that checksum, when run with the request's options) is expected to change. Implement the request, keeping everything else as the README says. Then run `python main.py data/real.csv --exempt General,toys` inside the project folder and respond with just the 8-character code it prints after `checksum`.answer
answer hidden on shared reportsagent's debrief
I added --exempt parsing and a lowercase extra-exempt set while keeping books exempt. My first edit accidentally left is_exempt unchanged, so the example still printed 38.70; after fixing that the example matched 36.00 and the real.csv checksum was 3361998a.
spec-violation-1✓ pass40s
prompt
Download airbench.ai/f/6a0481c5f952bee1af621c9ce5644791.zip and unzip it. It is a small Python project (Python 3.10 or newer, standard library only). The unit tests pass, but `python main.py data/sample.csv` does not print the checksum the README promises. Make the program follow its README, then run `python main.py data/real.csv` inside the project folder and respond with just the 8-character code it prints after `checksum`.answer
answer hidden on shared reportsagent's debrief
The unit tests were all green but the tax rounding used Python round(), which is banker rounding, not the README half-up rule. Replacing it with (taxable*rate+50)//100 made sample.csv print the promised checksum 77ec7154; real.csv gives b9d2d0d7.
far-cause-1✓ pass31s
prompt
Download airbench.ai/f/1d1308ff4aeebae5a21436029909af41.zip and unzip it. It is a small Python project (Python 3.10 or newer, standard library only). A user filed this issue: > **Report doesn't match the ledger** > Finance reconciled the report for `data/real.csv` against the ledger. For `US 2025-07 USD` the ledger has a gross of `140255.98`, but the report prints `gross=110224.17`. > `python main.py data/sample.csv` still prints the checksum in the README. Find the cause and fix it so the program follows its README, then run `python main.py data/real.csv` inside the project folder and respond with just the 8-character code it prints after `checksum`.answer
answer hidden on shared reportsagent's debrief
The root cause was a sign error in timestamp parsing: offsets were added to UTC instead of subtracted, so offset timestamps landed in the wrong instant/month. Fixing it changed US 2025-07 USD gross from 110224.17 to the ledger value 140255.98; sample checksum stayed ca59a833 and real checksum is e91a349e.
interacting-1✓ pass1m 28s
prompt
Download airbench.ai/f/21f0d063c12e94ba8df102ab59fb713a.zip and unzip it. It is a small Python project (Python 3.10 or newer, standard library only). A user filed this issue: > **Report totals don't match the ledger** > Finance reconciled the report for `data/real.csv` against the ledger. These groups are off: > > | group | ledger gross | report prints | > |---|---|---| > | `EU 2026-04 EUR` | `211866.92` | `211075.22` | > | `LATAM 2026-05 JPY` | `508143` | `5081.43` | > | `US 2026-03 USD` | `581875.67` | `580710.10` | > > All unit tests pass and `python main.py data/sample.csv` prints the checksum in the README, so nothing else flags it. There may be more than one cause. Fix the program so it follows its README, then run `python main.py data/real.csv` inside the project folder and respond with just the 8-character code it prints after `checksum`.answer
answer hidden on shared reportsagent's debrief
Three interacting causes: revisions compared raw timestamp strings instead of UTC instants, JPY was treated as 2-decimal in format/to_minor so LATAM JPY gross was off by 100, and tax used Python round instead of the README half-up formula. Fixing all three made every listed ledger group match; sample checksum stayed cb00179d and real gives 4bf73c29.
perf-1✓ pass2m 44s
prompt
Download airbench.ai/f/b96db45b3c78da526e6b39984209693f.zip and unzip it. It is a small Python log analyzer (Python 3.10 or newer, standard library only). It is correct but far too slow: `python gen.py 1252750109 1000000 > data/big.log` then `python main.py data/big.log` (run inside the project folder) would take hours. Make it fast without changing its output (the README gives the sample checksum), then respond with just the 8-character code it prints after `checksum` for `data/big.log`. The download link stays valid for the whole run.answer
answer hidden on shared reportsagent's debrief
I removed the quadratic bottlenecks: dedupe by event_id with a dict and first-appearance list, pairs with a set, concurrency with a difference sweep, and leader changes with an O(n) running-max update. I checked the optimized version against the original on the sample and on a 5000-event log (same checksum), then ran the 1,000,000-event big.log in about 5 seconds; checksum 22299c61.
rev-cpu-target1— unanswered—
prompt
This is target 1 of 6. The six targets run on the same CPU and come from the same download, but each one is its own challenge, passed or failed on its own, so submit a target as soon as you have it. Download airbench.ai/f/dee42e5a07ee174177fc22bc841e5223.zip and unzip it. It holds one folder, cpu/. The download link stays valid for the whole run. This CPU is undocumented. Using the partial spec (cpu/partial_spec.md), the probe programs and their execution traces (cpu/probes/), work out how it behaves, then run each target program in cpu/targets/ (target1.hex ... target6.hex, no traces given) until it halts. Program files come as hex text; partial_spec.md says how to decode them. For each target, report: - the FNV-1a 32-bit hash of all bytes the program wrote to port 0, in order, as 8 lowercase hex digits (offset basis 0x811c9dc5, prime 0x01000193); - the final value of register R0, as 4 lowercase hex digits. Work autonomously: nobody will answer questions or confirm anything during this task, so never stop to ask. If you are stuck on part of the CPU, make your best inference and keep going. Each target leans on a different part of the CPU, so one you cannot work out costs only the targets that use it. Always answer: a target you are unsure of still passes if it is right. Answer with one line for this target, in this format: target1 <hash> <r0>rev-cpu-target2— unanswered—
prompt
This is target 2 of 6. The six targets run on the same CPU and come from the same download, but each one is its own challenge, passed or failed on its own, so submit a target as soon as you have it. Download airbench.ai/f/dee42e5a07ee174177fc22bc841e5223.zip and unzip it. It holds one folder, cpu/. The download link stays valid for the whole run. This CPU is undocumented. Using the partial spec (cpu/partial_spec.md), the probe programs and their execution traces (cpu/probes/), work out how it behaves, then run each target program in cpu/targets/ (target1.hex ... target6.hex, no traces given) until it halts. Program files come as hex text; partial_spec.md says how to decode them. For each target, report: - the FNV-1a 32-bit hash of all bytes the program wrote to port 0, in order, as 8 lowercase hex digits (offset basis 0x811c9dc5, prime 0x01000193); - the final value of register R0, as 4 lowercase hex digits. Work autonomously: nobody will answer questions or confirm anything during this task, so never stop to ask. If you are stuck on part of the CPU, make your best inference and keep going. Each target leans on a different part of the CPU, so one you cannot work out costs only the targets that use it. Always answer: a target you are unsure of still passes if it is right. Answer with one line for this target, in this format: target2 <hash> <r0>rev-cpu-target3— unanswered—
prompt
This is target 3 of 6. The six targets run on the same CPU and come from the same download, but each one is its own challenge, passed or failed on its own, so submit a target as soon as you have it. Download airbench.ai/f/dee42e5a07ee174177fc22bc841e5223.zip and unzip it. It holds one folder, cpu/. The download link stays valid for the whole run. This CPU is undocumented. Using the partial spec (cpu/partial_spec.md), the probe programs and their execution traces (cpu/probes/), work out how it behaves, then run each target program in cpu/targets/ (target1.hex ... target6.hex, no traces given) until it halts. Program files come as hex text; partial_spec.md says how to decode them. For each target, report: - the FNV-1a 32-bit hash of all bytes the program wrote to port 0, in order, as 8 lowercase hex digits (offset basis 0x811c9dc5, prime 0x01000193); - the final value of register R0, as 4 lowercase hex digits. Work autonomously: nobody will answer questions or confirm anything during this task, so never stop to ask. If you are stuck on part of the CPU, make your best inference and keep going. Each target leans on a different part of the CPU, so one you cannot work out costs only the targets that use it. Always answer: a target you are unsure of still passes if it is right. Answer with one line for this target, in this format: target3 <hash> <r0>rev-cpu-target4— unanswered—
prompt
This is target 4 of 6. The six targets run on the same CPU and come from the same download, but each one is its own challenge, passed or failed on its own, so submit a target as soon as you have it. Download airbench.ai/f/dee42e5a07ee174177fc22bc841e5223.zip and unzip it. It holds one folder, cpu/. The download link stays valid for the whole run. This CPU is undocumented. Using the partial spec (cpu/partial_spec.md), the probe programs and their execution traces (cpu/probes/), work out how it behaves, then run each target program in cpu/targets/ (target1.hex ... target6.hex, no traces given) until it halts. Program files come as hex text; partial_spec.md says how to decode them. For each target, report: - the FNV-1a 32-bit hash of all bytes the program wrote to port 0, in order, as 8 lowercase hex digits (offset basis 0x811c9dc5, prime 0x01000193); - the final value of register R0, as 4 lowercase hex digits. Work autonomously: nobody will answer questions or confirm anything during this task, so never stop to ask. If you are stuck on part of the CPU, make your best inference and keep going. Each target leans on a different part of the CPU, so one you cannot work out costs only the targets that use it. Always answer: a target you are unsure of still passes if it is right. Answer with one line for this target, in this format: target4 <hash> <r0>rev-cpu-target5— unanswered—
prompt
This is target 5 of 6. The six targets run on the same CPU and come from the same download, but each one is its own challenge, passed or failed on its own, so submit a target as soon as you have it. Download airbench.ai/f/dee42e5a07ee174177fc22bc841e5223.zip and unzip it. It holds one folder, cpu/. The download link stays valid for the whole run. This CPU is undocumented. Using the partial spec (cpu/partial_spec.md), the probe programs and their execution traces (cpu/probes/), work out how it behaves, then run each target program in cpu/targets/ (target1.hex ... target6.hex, no traces given) until it halts. Program files come as hex text; partial_spec.md says how to decode them. For each target, report: - the FNV-1a 32-bit hash of all bytes the program wrote to port 0, in order, as 8 lowercase hex digits (offset basis 0x811c9dc5, prime 0x01000193); - the final value of register R0, as 4 lowercase hex digits. Work autonomously: nobody will answer questions or confirm anything during this task, so never stop to ask. If you are stuck on part of the CPU, make your best inference and keep going. Each target leans on a different part of the CPU, so one you cannot work out costs only the targets that use it. Always answer: a target you are unsure of still passes if it is right. Answer with one line for this target, in this format: target5 <hash> <r0>rev-cpu-target6— unanswered—
prompt
This is target 6 of 6. The six targets run on the same CPU and come from the same download, but each one is its own challenge, passed or failed on its own, so submit a target as soon as you have it. Download airbench.ai/f/dee42e5a07ee174177fc22bc841e5223.zip and unzip it. It holds one folder, cpu/. The download link stays valid for the whole run. This CPU is undocumented. Using the partial spec (cpu/partial_spec.md), the probe programs and their execution traces (cpu/probes/), work out how it behaves, then run each target program in cpu/targets/ (target1.hex ... target6.hex, no traces given) until it halts. Program files come as hex text; partial_spec.md says how to decode them. For each target, report: - the FNV-1a 32-bit hash of all bytes the program wrote to port 0, in order, as 8 lowercase hex digits (offset basis 0x811c9dc5, prime 0x01000193); - the final value of register R0, as 4 lowercase hex digits. Work autonomously: nobody will answer questions or confirm anything during this task, so never stop to ask. If you are stuck on part of the CPU, make your best inference and keep going. Each target leans on a different part of the CPU, so one you cannot work out costs only the targets that use it. Always answer: a target you are unsure of still passes if it is right. Answer with one line for this target, in this format: target6 <hash> <r0>opt-route-bronze— unanswered—
prompt
This is the bronze level of three (bronze, silver, gold). All three are the same problem and the same download, and each level is its own challenge, passed or failed on its own, so you can send one plan to all three. Download airbench.ai/f/7179964d2192ff11d27cb79c059a01b1.zip and unzip it. It holds a courier-dispatch problem: the rules in problem.md and the day's data next to it. Plan the routes as problem.md says, then respond with your solution: one JSON object of the form {"routes": [{"start": 0, "stops": [12, 7]}, ...]}. It passes bronze if it is valid and its cost is low enough (gold is close to a strong reference solution, bronze is the easiest). The download link stays valid for the whole run.opt-route-silver— unanswered—
prompt
This is the silver level of three (bronze, silver, gold). All three are the same problem and the same download, and each level is its own challenge, passed or failed on its own, so you can send one plan to all three. Download airbench.ai/f/7179964d2192ff11d27cb79c059a01b1.zip and unzip it. It holds a courier-dispatch problem: the rules in problem.md and the day's data next to it. Plan the routes as problem.md says, then respond with your solution: one JSON object of the form {"routes": [{"start": 0, "stops": [12, 7]}, ...]}. It passes silver if it is valid and its cost is low enough (gold is close to a strong reference solution, bronze is the easiest). The download link stays valid for the whole run.opt-route-gold— unanswered—
prompt
This is the gold level of three (bronze, silver, gold). All three are the same problem and the same download, and each level is its own challenge, passed or failed on its own, so you can send one plan to all three. Download airbench.ai/f/7179964d2192ff11d27cb79c059a01b1.zip and unzip it. It holds a courier-dispatch problem: the rules in problem.md and the day's data next to it. Plan the routes as problem.md says, then respond with your solution: one JSON object of the form {"routes": [{"start": 0, "stops": [12, 7]}, ...]}. It passes gold if it is valid and its cost is low enough (gold is close to a strong reference solution, bronze is the easiest). The download link stays valid for the whole run.
how this agent was configured
Hardware: NVIDIA RTX 5090 32 GB (SM120), x86_64, driver 595.84, Ubuntu 24.04 (host hal5090). Model server: Checkpoint ISTA-DASLab/DeepSeek-V4.1-Flash-1017-GSQ-RCO-Coder-GGUF IQ2_XXS @54229d38 (expert-pruned: 192 of 384 experts per layer kept for code, tools, long context and vision; the shared Engram IQ4_NL table read from disk) on Strata 0.2.10 (Terminal 0.1.56 from the release archive, run in the ghcr.io/niko1221/strata:0.2.9-cuda13 image since 0.2.10 has no image yet; DeepSeek engine package strata-dsv41 0.1.56 cuda13): strata launch --family deepseek41 --model ISTA-DAS-Coder --context 262144 --parallel 1, Unsloth's DSpark drafter and mmproj-BF16 beside it, everything else Strata's defaults. Served by the m64 capsule m64_647a04050fc2 (motif64 capsule dsv41-flash-coder-strata0210-256k-5090) on one RTX 5090 with 64 GB of RAM, reached at the capsule's own server (its proxy.py in front of Strata, requests passed as they are) rather than m64's front, which accepts only a few chat parameters. "fit_max_tokens": false written to the run config before launch (answer 400 instead of shortening max_tokens). Harness: pi 0.73.1 (@mariozechner/pi-coding-agent) in a container (node:22): `pi -p --mode json <prompt>`; per-run PI_CODING_AGENT_DIR models.json with compat supportsDeveloperRole=false, supportsReasoningEffort=false; context 262144, max output 32768 tokens; settings compaction.reserveTokens=65536, keepRecentTokens=20000. Orchestrator: github.com/dh7/agent-checkup-benchmark @ de132e8; the checkup instructions are passed verbatim as a single prompt, one attempt, no time limit unless noted. Model requests pass through the orchestrator's local proxy, which only intervenes when the server rejects prompt + max_tokens as over the context window: it then retries once with max_tokens lowered to fit.
conclusion
9 passed, 0 failed, 9 unanswered, out of 18. pi used up the full time and was cut at 185 minutes. Unlike the 128k run (801056fe), which ended on a 400 at 137k, this one never ran out of context. It reached 252,109 tokens of the 262,144 window. The checkup proxy cut max_tokens on the 400s, and pi then compacted once, to 27,889 tokens. It was at about 93k when the time ran out. Passed: the first nine (fix-one-1 to perf-1). It then spent the rest of the time on opt-route (the dispatch instance) and submitted none of the remaining nine. Time was the limit, not context: the engine decoded at about 40-50 tok/s here, against about 200 for Qwen3.8-Flash-Next on the same Strata 0.2.10, which scored 11 at 384k.
discussion
Sign in to join the discussion
No messages yet.