Skip to content
tomo-labs

Hy3 on current Tomo solves five of fifteen, and unbounded completions consume the run

The post-LeetCode Tomo OI baseline runs all fifteen offline SWE-bench-Live tasks on hy3-free at pass@1. It solves five, including Kubernetes Python after a ten-minute first completion, and records 1.72 million provider-reported tokens. That number is a lower bound: 29.

Reproducibility header: suite=all 15 checked-in swebench-live scenarios; model=hy3-free through OpenCode Zen, observed provider=Novita, upstream model=tencent/hy3:free; tool=tomo-oi; Tomo pin=4947c32b83af8c93e9feaa91f4cbb01c10b5e5ec; one capability attempt per scenario; scored timeout=900 seconds; environment-prep timeout=300 seconds after the harness fix; concurrency=1; agent network=off; hidden grader on the host; campaign data=/Users/apple/data/tomo-labs/hy3-swebench-20260721/tomo-before; actual free-tier invoice=$0; paid-twin list reference=$0.20/M fresh input, $0.05/M cached input, $0.80/M output.

This is the first full arm after Tomo's compact OI system contract landed for the LeetCode work. It is intentionally a baseline, not the optimized SWE-bench result. Every task receives the same repository-level prompt, isolated checkout, prepared tools, and hidden host grader. No task name, gold patch, hidden test, or expected output is added to Tomo's prompt.

The result is five passes of fifteen. The more important finding is why the other ten consume time. Some are ordinary capability misses. Some are long but healthy agent loops. Five unrelated repositories produce multi-minute, multi-megabyte completions before Tomo can execute the next action. The engine currently gives one model call no output ceiling, so one bad call can consume two-thirds of the entire task allowance.

The complete pass@1 board

Input includes cached input; reasoning is a subset of output, not an additional token class. Stop is the runner's recorded termination class. All token values are provider-reported and therefore lower bounds where a stream did not finish with usage.

Task Verdict Stop Calls Input Cached Output Reasoning Reported total Wall
cfn-lint-3798 FAIL turns 18 174,877 142,080 16,048 13,253 190,925 385s
briefcase-2085 PASS natural 4 9,636 6,016 1,775 1,180 11,411 47s
conan-17123 PASS natural 6 12,704 8,384 1,522 61 14,226 44s
gitingest-94 PASS natural 5 9,001 5,376 1,001 532 10,002 31s
dynaconf-1225 FAIL timeout 41 490,697 444,160 10,087 1,757 500,784+ 900s
fonttools-3682 PASS natural 13 48,954 39,552 2,957 1,711 51,911 102s
smolagents-285 FAIL natural 6 13,266 9,664 5,368 4,300 18,634 94s
instructlab-2540 FAIL turns 16 93,100 81,280 1,116 159 94,216 57s
faker-2142 FAIL natural 3 51,954 23,808 22,042 4,679 73,996+ 555s
kubernetes-python-2303 PASS natural 11 23,054 18,048 1,882 86 24,936+ 661s
mesa-2394 FAIL natural 2 87,132 0 16,549 1,472 103,681+ 210s
python-control-1064 FAIL turns 35 220,834 200,576 5,478 1,980 226,312 214s
sqllineage-661 FAIL timeout 26 266,352 229,888 32,582 29,796 298,934 900s
sphinx-12975 FAIL timeout 2 0 0 0 0+ 900s
dspy-1651 FAIL turns 17 92,492 78,848 10,958 9,906 103,450 271s
total 5/15 3 timeout, 4 turns 205 1,594,053 1,287,680 129,365 70,872 1,723,418+ 5,371s

The table's call total uses completed model calls from orchestration traces. The raw HTTP request counter is 220 because it also sees readiness and incomplete traffic. The lab aggregate calls seven capped cells out separately and reports 5/8 among uncapped attempts; for a full pass@1 capability board the denominator remains all fifteen, so the headline is 5/15.

The passing set is Briefcase, Conan, Gitingest, FontTools, and Kubernetes Python. Kubernetes is the revealing pass: the first useful action does not begin until an approximately ten-minute completion closes, then Tomo fixes the task in about one additional minute. The model and loop can solve it, but the completion boundary wastes most of the allowance before the loop can work.

Cost: zero invoice, $0.229151 reported-token floor

hy3-free billed nothing. Dollar comparisons between free arms are therefore all exactly $0 and cannot establish that one tool is cheaper than another. For a consumption comparison, the lab applies the public paid tencent/hy3 twin's list rates to the tokens the free route reported.

Component Tokens Rate per million Reference cost
Fresh input 306,373 $0.20 $0.061275
Cached input 1,287,680 $0.05 $0.064384
Output 129,365 $0.80 $0.103492
reported-token total 1,723,418 $0.229151+
actual free-route invoice $0.000000

The plus sign matters. This is not a complete cost estimate. The fifteen traces contain 29,614,467 response bytes, while Sphinx records zero usage and several other tasks omit usage for their largest response. Charging only finalized provider events makes the reference number a strict floor, not a bargain.

Task Fresh input Cached input Output Paid-twin reference
cfn-lint 32,797 142,080 16,048 $0.026502
briefcase 3,620 6,016 1,775 $0.002445
conan 4,320 8,384 1,522 $0.002501
gitingest 3,625 5,376 1,001 $0.001795
dynaconf 46,537 444,160 10,087 $0.039585+
fonttools 9,402 39,552 2,957 $0.006224
smolagents 3,602 9,664 5,368 $0.005498
instructlab 11,820 81,280 1,116 $0.007321
faker 28,146 23,808 22,042 $0.024453+
kubernetes-python 5,006 18,048 1,882 $0.003409+
mesa 87,132 0 16,549 $0.030666+
python-control 20,258 200,576 5,478 $0.018463
sqllineage 36,464 229,888 32,582 $0.044853
sphinx 0 0 0 $0.000000+
dspy 13,644 78,848 10,958 $0.015438

The trace has three different kinds of slow

1. Environment preparation

Smolagents initially looked like a model stall before the model ran. Its test extra recursively includes every integration: Torch, Triton, transformers, UI, audio, and more. The old prep order selected that extra first, filled the host, and never reached Hy3.

The general fix prefers the normal project dependency set, installs pytest separately, and uses extras only as fallbacks. The normal Smolagents package still declares TorchVision as a core dependency, so its shared cache reaches 4.7 GiB. Because cache and venv are separate bind mounts, uv could not hardlink and copied another 3.4 GiB into one throwaway attempt. Setting the prep container's link mode to symlink reduced that active venv to 2.6 MiB, approximately 1,300 times smaller, while the stable cache remained mounted for the attempt.

InstructLab adds a second case: a native dependency needs a compiler absent from the common prep image. The prep path now tries a source-only editable install before broad optional extras, leaving the checkout and pytest usable rather than repeating an impossible dependency graph.

SQLLineage adds a third: package metadata launches npm run build, and alternative install forms repeat it. Environment prep is now bounded at 300 seconds through LAB_PREP_TIMEOUT; a timeout removes the prep container and starts the agent with the partial environment. This is outside scored wall time and consumes no capability attempt.

These changes landed as tomo-labs PRs #131, #132, #133, and #134. They apply to every tool and task.

2. Healthy but expensive iteration

Python-control is not a streaming anomaly. It makes 35 completed model calls in 214 seconds and reports 226,312 tokens. The loop keeps investigating and editing until its turn guard ends the run, but hidden tests remain red. That is a convergence-governor problem: many normal calls, real work, no correct finish.

SQLLineage mixes both shapes. It advances in bursts, then waits on individual long calls, reaching 26 completed calls and 298,934 tokens before the 900-second ceiling. The task still fails.

3. Unbounded individual completions

Five tasks make the clearest case:

Task Largest raw response Usage events / HTTP requests Scored wall Verdict
dynaconf 2,871,673 bytes 39 / 42 900s FAIL, timeout
faker 1,942,921 bytes 3 / 4 555s FAIL
kubernetes-python 2,990,713 bytes 10 / 12 661s PASS
mesa 1,629,929 bytes 2 / 3 210s FAIL
sphinx 2,527,515 bytes 0 / 3 900s FAIL, timeout

The response files are raw SSE, not a text-token estimate. Their size proves substantial output occurred even when the provider never finalized usage. On Dynaconf and Kubernetes, request two runs for about ten minutes before Tomo can execute the next action. Sphinx spends the full ceiling across two such streams and reports zero tokens.

This points to a global engine control: bound one completion while leaving the total task budget intact. It does not justify shortening the 900-second task ceiling, changing one task's prompt, or leaking a hidden test. The same model behavior appears across five unrelated repositories.

Campaign-integrity fixes discovered before the board

The first Dynaconf timeout exposed a pass@1 bug. Killing a live SSE connection at the wall ceiling leaves a truncated response, and the runner mistook that truncation for a retryable gateway drop. It started an impossible attempt 2/1.

Tomo-labs PR #130 now excludes timeout exit code 124 from infrastructure stream retries. A real dropped stream remains retryable; a timeout grades the partial tree once and stops. The regression test covers both classes.

The invalid pre-fix retry was stopped and never entered this board. One separately interrupted InstructLab setup produced an exit -1 row with no grader verdict; its whole timestamped directory was moved, intact, under invalid-interrupted before aggregation. The published dataset contains exactly fifteen canonical result files.

What this baseline does and does not say

It says current Tomo OI plus the current Hy3 free route solves five of fifteen at pass@1. It says setup was a real source of delay on heavyweight historical packages, and those general harness problems are now bounded. It says the dominant scored latency is currently unbounded model completions, not Python setup, hidden grading, or a mathematical task needing more thought.

It does not say the run cost only $0.229151 at paid rates. That number prices only reported tokens and is a floor. It does not say 5/8 merely because the lab excludes capped cells from its uncapped median population. The capability denominator is fifteen. It does not yet say Tomo beats Pi or OpenCode. Those full arms have not run in this new campaign.

Next comes the requested historical control: all fifteen tasks on exact pre-LeetCode Tomo OI commit 08f88f6, still on Hy3 and the corrected common harness. Then Pi and OpenCode run the same grid. Only after those reports merge will Tomo be optimized, across multiple harnesses, for more passes and lower paid-twin reference consumption than both rivals.

Metrics: 15 canonical pass@1 scenarios; 5 passes; 1,723,418 provider-reported tokens plus missing usage; 29.6 MB raw response traces; 5,371 scored seconds; 220 HTTP requests; actual invoice $0; paid-twin reference floor $0.229151; harness PRs #130 through #134 merged; no task-specific prompt or hidden-test change.