Skip to content

Add the free-form code arm and the repair-clause ablation switch - #104

Open
rajeeja wants to merge 1 commit into
mainfrom
rajeeja/freeform-eval-arm
Open

Add the free-form code arm and the repair-clause ablation switch#104
rajeeja wants to merge 1 commit into
mainfrom
rajeeja/freeform-eval-arm

Conversation

@rajeeja

@rajeeja rajeeja commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Adds the code-execution arm to the multi-turn eval so the typed surface can be compared against the obvious alternative of letting the model write Python, and adds EVAL_ERROR_MODE so the value of naming a repair in an error can be measured instead of assumed.

Both arms share tasks, fixtures, models, turn budget, and score_run, so only the action surface differs. Measured over five common models, task completion was 16/25 typed against 10/25 free-form, and the unlabeled-field guardrail held 4/5 against 1/5 — free-form code has nowhere to put a precondition, so it computes a curl from a wind field with no units or directional metadata.

The interpreter arm is opt-in, runs only against synthetic fixtures in a temp state dir, and is not imported by the default eval run. 640 tests pass and pre-commit is clean.

The multi-turn eval could measure how agents behave with typed tools but
had no way to answer the obvious objection: why not just let the model
write Python? This adds that arm. It hands the model one run_python tool
in a namespace with uxarray imported and the fixture paths bound, then
scores it with the same score_run as the typed arm so the two are
directly comparable. Tasks, fixtures, models, and turn budget are held
fixed; only the action surface changes.

Two scores are specific to code execution. silent_wrong marks a run that
terminated normally and stated a number that was wrong, which is the
failure the typed surface exists to prevent. guardrail_respected records
whether the model noticed that the unlabeled wind field has no units or
directional metadata; free-form code will compute a curl from it without
complaint because nothing in the library requires the caller to have
established that two arrays are vector components.

Also adds EVAL_ERROR_MODE, which strips the repair clause from an error
without changing anything else, so the value of naming a repair can be
measured rather than assumed, and the front-door repair text and handle
diagnostics the ablation toggles.

The interpreter arm is opt-in, runs only against synthetic fixtures in a
temporary state directory, and is never imported by the default eval run.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant