Hillclimb graff vs grok-build on grok-4.6 list-price axes - #684
Closed
justrach wants to merge 8 commits into
Closed
Conversation
Score graff-evals at xAI grok-4.6 list prices instead of SuperGrok's $0.0000 footer, and keep harness changes only when wall / first-token latency / calls / tokens / USD improve. Refuse grok-build heap and a 4-tool catalog. Historical paired JSONL is the scored baseline; grok-build is unsigned-in on this host.
Same-day A/B on exact-reply, file-ops, and fix-fib: GRAFF_XAI_X_SEARCH=0 cut wall 15%, first-token 38%, tokens 38%, and list-price USD 49% vs the x_search-on champion. Calls and pass held. grok-build still wins summed wall on fix-fib and uses ~6x the tokens once cache is counted. Promote the knob onto the eval harnesses only; product default stays ADR 0031. Heap and catalog untouched.
justrach
marked this pull request as ready for review
August 30, 2026 03:50
grok-build 1.0.5 still has web_search on; x_search-off was the wrong steal. Their headless path does not copy a 127M binary into cwd. graff -p with ≥5 API calls was materializing .graff/learn-kit/graff-pinned and burning ~38s CPU on fix-fib. One-shot/json now skip that bootstrap. Lean intro takes their 'prefer file tools, do local work this turn'.
graff-dev 3/3 in 21.8s / $0.048 vs grok-build 27.3s / $0.142 on the same three grok-4.6 tasks. fix-fib sandbox is 76K (was 127M). x_search stays on; x-search-off is not a grok-build copy.
The 127M tax was copyExecutable after five API calls, not hosted search. Skipping learn-auto on -p hid it from oneshots and left the TUI/REPL copying zig-out/bin/graff into .graff/learn-kit/graff-pinned. Pin with a hardlink (same inode, survives graff update) and copy only when the filesystem cannot. Scripted `graff repl` now prints the same [usage] footer so evals can score both surfaces.
autoInitLearning now spawns `graff learn init` in its own process group, same pattern as a background trial. Suite generation was ~38s of CPU after the pin became a hardlink; that tax no longer sits on teardown. Live 3-task A/B (run-20260830-042417): we win wall/tokens/list$/RSS and lose calls — not Pareto vs grok-build. ADR 0045.
Two 2D projections of run-20260830-042417 (wall vs list$, calls vs list$). Honest: we are not strict Pareto — grok still wins calls (7 vs 8/9). graff-dev sits on the frontier via cheaper/faster; grok via fewer calls; the REPL point is interior (dominated by -p). REPL first-token is composer echo and is not plotted.
Interactive graff tui --yolo --model grok-4.6: test printed OK at 5.9s, no graff-pinned, no 127M extra inode. Same 4-call miss of the learn-auto threshold as the -p row. Still not Pareto vs grok-build (they win calls).
This was referenced Aug 30, 2026
Owner
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Score evals at xAI grok-4.6 list price, then copy what grok-build actually does — not a side bet.
The fix (shared
-p/ REPL path)The 127M tax was
learn_autobyte-copyingzig-out/bin/graffinto.graff/learn-kit/graff-pinnedafter five API calls (~38s CPU onfix-fib). grok-build does not do that.Skipping learn-auto on
-phid the copy from oneshots and left the REPL/TUI still doing it. That path split is retracted.This revision:
graff-pinned(same inode, O(1);graff updatereplacing the live path leaves the pin). Copy only when the filesystem cannot. Proven at/tmp/graff-pin-proof: pin andzig-out/bin/graffshare inode 1478920, nlink=2.-p, pipedgraff repl, and TTYgraff tuishare one learn-auto path. Scriptedgraff replprints the same[usage]footer so both surfaces score.learn initis detached (ADR 0045) — same process-group spawn as a background trial. Suite generation is still ~38s of CPU; teardown no longer waits on it.x_searchstays on (ADR 0031). grok-build 1.0.5 still listsweb_search/web_fetch. Heap and catalog untouched (ADR 0024).Live A/B —
run-20260830-042417.jsonlSame SuperGrok / grok OAuth, grok-4.6, one rep, three core tasks. x_search on.
-pand scriptedgraff replwere measured the same way.-p)REPL is fatter than
-pbecause it is not lean-oneshot. REPLfirst_out_sis composer echo — ignore it; it is not time-to-first-model-token.-pwall / $ / callsThis run's fix-fib used 4 API calls, so learn-auto did not fire (threshold is 5). No pin in those sandboxes.
Interactive TUI (same fix-fib)
graff tui --yolo --model grok-4.6on a PTY (Ctrl+Q): test printed OK at 5.9s, turn 7.4s, session 9.3s including boot/quit..graffwas 52K. Nograff-pinned, no extra 127M inode. Four API-call traces (quit during the fourth after the test passed), so learn-auto did not fire — same threshold miss as the-prow. First model token 2.6s.Not strict Pareto
No. Grok-build still wins calls (7 vs 8 on
-p, 7 vs 9 on REPL) and file-ops wall. We win wall, tokens, list$, and RSS. Pass is a tie. Do not claim a 5-axis win. Heap still theirs (155M vs 91M) — not stolen.On this 3-point set both
-pand grok-build are non-dominated (they own calls; we own the rest). That is a shared front, not a win.Frontier graph
Two 2D projections of that live 3-task set (lower-left is better). Source:
graff-evals/hillclimb/frontier-20260830.svgandbaseline.md.-p)-p)flowchart LR subgraph front[5-axis frontier - neither dominates] P[graff-dev -p: 22.2s / $0.0374 / 8 calls / on via cheaper and faster] G[grok-build: 37.0s / $0.1474 / 7 calls / on via fewer calls] end R[graff-dev-repl: 25.2s / $0.1185 / 9 calls / interior, dominated by -p] P -->|wins wall, calls, tokens, list$, RSS| R