Files
gemma4-research/scripts/bakeoff/runs/gemma4-26b-retry/log.json
T
Mortdecai a945207aab feat: CLI coding agent bakeoff — 26b reproducibly silent-stops at write_file
Ran minimal agent loop (Ollama /api/chat + read_file/write_file/run_bash) on
steel141 3090 Ti against 3 models on a broken-median-function task:

- gemma4:31b-it-q4_K_M: PASS (8 iters, 1 write, 44s) — textbook trace
- qwen3-coder:30b: PASS (15 iters, 1 write, 22s) — correct but chatty
- gemma4:26b: FAIL (6 iters, 0 writes) — silently stops with eval=4
  after reading source. Reproduced on second run. One-shot probe
  confirms 26b CAN produce the correct fix — failure is specifically
  at the write_file tool-call argument boundary.

Updates GOTCHAS with a new HIGH-severity entry, SYNTHESIS model-selection
table, CORPUS_cli_coding_agent.md empirical-follow-up pointer, and adds
docs/reference/bakeoff-2026-04-18.md with the full writeup.
2026-04-18 13:27:50 -04:00

106 lines
5.5 KiB
JSON

{
"model": "gemma4:26b",
"workdir": "/home/claude/bin/gemma4-research/scripts/bakeoff/runs/gemma4-26b-retry/work",
"started_at": 1776533063.5394974,
"turns": [
{
"iteration": 1,
"elapsed_s": 6.72,
"content": "",
"tool_calls": [
{
"name": "run_bash",
"arguments": {
"command": "ls -R"
},
"result": "exit=0\n--- stdout ---\n.:\ncalc\nREADME.md\ntests\n\n./calc:\n__init__.py\n__pycache__\nstats.py\n\n./calc/__pycache__:\n__init__.cpython-313.pyc\nstats.cpython-313.pyc\n\n./tests:\n__pycache__\ntest_stats.py\n\n./tests/__pycache__:\ntest_stats.cpython-313-pytest-9.0.2.pyc\n\n--- stderr ---\n"
}
],
"prompt_eval_count": 389,
"eval_count": 21
},
{
"iteration": 2,
"elapsed_s": 0.64,
"content": "",
"tool_calls": [
{
"name": "read_file",
"arguments": {
"path": "README.md"
},
"result": "# Bakeoff Task\n\nA tiny Python package (`calc/`) with a statistics module. Run `pytest` from this\ndirectory \u2014 two tests currently fail because `median` returns the upper-middle\nelement instead of averaging the two middle elements on even-length inputs.\n\nYour job: make all tests pass. Do not disable or modify the tests.\n\nAllowed tools:\n- `read_file(path)` \u2014 read a file (relative to this directory)\n- `write_file(path, content)` \u2014 overwrite a file (relative to this directory)\n- `run_bash(command)` \u2014 run a shell command (cwd is this directory)\n\nWhen all tests pass, reply with a short summary of the fix and stop calling tools.\n"
}
],
"prompt_eval_count": 530,
"eval_count": 21
},
{
"iteration": 3,
"elapsed_s": 0.66,
"content": "",
"tool_calls": [
{
"name": "run_bash",
"arguments": {
"command": "pytest"
},
"result": "exit=2\n--- stdout ---\n============================= test session starts ==============================\nplatform linux -- Python 3.13.5, pytest-9.0.2, pluggy-1.6.0\nrootdir: /home/claude/bin/gemma4-research/scripts/bakeoff/runs/gemma4-26b-retry/work\nplugins: asyncio-1.3.0, anyio-4.12.1\nasyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function\ncollected 0 items / 1 error\n\n==================================== ERRORS ====================================\n_____________________ ERROR collecting tests/test_stats.py _____________________\nImportError while importing test module '/home/claude/bin/gemma4-research/scripts/bakeoff/runs/gemma4-26b-retry/work/tests/test_stats.py'.\nHint: make sure your test modules/packages have valid Python na"
}
],
"prompt_eval_count": 711,
"eval_count": 19
},
{
"iteration": 4,
"elapsed_s": 0.88,
"content": "",
"tool_calls": [
{
"name": "run_bash",
"arguments": {
"command": "export PYTHONPATH=$PYTHONPATH:. && pytest"
},
"result": "exit=1\n--- stdout ---\n============================= test session starts ==============================\nplatform linux -- Python 3.13.5, pytest-9.0.2, pluggy-1.6.0\nrootdir: /home/claude/bin/gemma4-research/scripts/bakeoff/runs/gemma4-26b-retry/work\nplugins: asyncio-1.3.0, anyio-4.12.1\nasyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function\ncollected 7 items\n\ntests/test_stats.py ..FFF.. [100%]\n\n=================================== FAILURES ===================================\n_______________________________ test_median_even _______________________________\n\n def test_median_even():\n> assert median([1, 2, 3, 4]) == 2.5\nE assert 3 == 2.5\nE + where 3 = median([1, 2,"
}
],
"prompt_eval_count": 1147,
"eval_count": 26
},
{
"iteration": 5,
"elapsed_s": 1.12,
"content": "",
"tool_calls": [
{
"name": "read_file",
"arguments": {
"path": "calc/stats.py"
},
"result": "\"\"\"Basic statistics helpers.\"\"\"\n\n\ndef mean(numbers):\n \"\"\"Arithmetic mean of a non-empty list.\"\"\"\n return sum(numbers) / len(numbers)\n\n\ndef median(numbers):\n \"\"\"Return the median of a list of numbers.\"\"\"\n s = sorted(numbers)\n n = len(s)\n return s[n // 2]\n\n\ndef mode(numbers):\n \"\"\"Return the most common value. Ties broken by first occurrence.\"\"\"\n counts = {}\n for x in numbers:\n counts[x] = counts.get(x, 0) + 1\n best = None\n best_count = -1\n for x in numbers:\n if counts[x] > best_count:\n best = x\n best_count = counts[x]\n return best\n\n\ndef variance(numbers):\n \"\"\"Sample variance (divides by n-1).\"\"\"\n if len(numbers) < 2:\n raise ValueError(\"variance requires at least 2 values\")\n m = mean(numbers)\n return"
}
],
"prompt_eval_count": 1786,
"eval_count": 23
},
{
"iteration": 6,
"elapsed_s": 0.6,
"content": "",
"tool_calls": [],
"prompt_eval_count": 2075,
"eval_count": 4
}
],
"final": {
"halt_reason": "no_tool_calls",
"tests_pass": false,
"iterations_used": 6,
"tool_call_counts": {
"read_file": 2,
"write_file": 0,
"run_bash": 3
},
"wall_clock_s": 11.36
}
}