The evidence behind lua-agent-lab, from lua-agent. The experiment separates structural tool-call validity from useful tool selection and complete task success.
Dataset Card
By Jeorge A., published under mit, revision 4b60bb31ae40.
The evidence behind lua-agent-lab, from lua-agent. The experiment separates structural tool-call validity from useful tool selection and complete task success.
Contents
| Configuration | Unit | Method |
|---|---|---|
decoder_trials |
60 first-turn trials | TinyStories 15M; 30 constrained, 30 free; greedy sampling |
loop_ablations |
64 agent runs | Eight scripted tasks × eight loop configurations |
qwen_runs |
16 agent runs | Eight tasks × constrained/free Qwen 2.5 1.5B Q4_K_M |
tasks |
Eight task definitions | Prompts, allowed tools, expected outcomes, scripted turns |
The test split is an inspectable demonstration suite, not a training set or a representative benchmark. Do not treat 30 trials as 30 independent problems: ten prompts are repeated with 0, 1 and 2 trailing spaces, matching the original ablation. No confidence interval or population-level claim is implied.
Collection and provenance
Generated with python -m space.export_dataset --tiny --qwen from the source
repository. Each measured row includes its UTC collection time, a SHA-256
digest of the relevant source, exact settings and pinned model revisions.
manifest.json records the checksum and row count of each data file.
The baseline source commit was 1738e7dd63bf0d65a055fd11a497c30b3f47eff4;
the adapter and metadata additions are represented by the per-row source digest.
provenance/source/ contains the exact normalized source and fixtures covered
by that digest, so the exported runs remain auditable without a moving branch.
TinyStories runs backend/local.lua and grammar.lua inside Lua 5.4 with
PyTorch float32 numerical kernels from tools/llama2c.py. The tokenizer is
the original Lua implementation. This differs numerically from the original
pure-Lua inference, so new rows are not attributed to the historical result.
Both arms scaffold THOUGHT: and CALL:. Constraints can append a final
grammar completion at the token limit; forced_finishes counts these cases,
and each affected step has forced_finish: true.
Qwen uses the official pinned GGUF repository and llama-cpp-python 0.3.16 on
CPU. Constrained decoding uses a schema describing the available tools;
free decoding omits that schema. Prompts and greedy sampling are otherwise
the same. The runtime scaffolds CALL: in both arms and does not repair free
output. These are distinct from the historical Ollama Qwen run.
Scripted rows use the original fixed turn lists and actual Lua loop, with
fresh virtual fixtures per run. They demonstrate control flow, not model
capability. The large_context_budget variant raises the budget to 100000
estimated tokens so eviction does not occur; it does not simulate overflow.
The approval-gate ablation only permits virtual writes. drop_oldest changes
the eviction policy; no_error_recovery removes both parse and tool recovery.
The historical 30/30 constrained versus 0/30 free result, with 0/30
usable tool selections in both arms, is preserved verbatim in
provenance/constrained-vs-free.txt. Complete historical trial traces were not
saved; none have been invented. provenance/eval-qwen1.5b.txt likewise preserves
the historical 6/8 Ollama report without implying complete raw traces exist.
Schema and metrics
The three run configurations use the same flat schema:
prompt,task_id,expected_tools,expected_outcome: the task and labels.selected_tools,answer,reason,passed,judge_note: observed outcome.generated_turns,valid_calls,tool_call_validity: parsed tool calls / generated turns, in percent.answeris a tool; argument correctness and whether a tool is registered are not checked by this syntax metric.first_tool,correct_first_tool: first generated turn's choice against accepted tools. A malformed first turn is incorrect. Unlabeled or unavailable choices are null; the directory-listing decoder prompt has no available suitable tool in the two-tool catalogue.steps,malformed_calls,loop_detected,context_evicted,forced_finishes: measurements from the step records.settings_json,trace_json,approvals_json: JSON-encoded structured records. Strings preserve arbitrary tool argument shapes without a lossy Arrow union. Decode withjson.loads(row['trace_json']).model,inference_kind,decoder,token_accounting,elapsed_seconds,run_at,source_sha256,model_revisions_json: provenance and conditions.
Task success uses the repository's solved functions for real models and
check functions for scripts. Scripted checks require the intended mechanism
to fire. Some judges are substring based and can accept spurious matches;
read traces rather than treating the score as a strong capability estimate.
First-turn decoder trials have passed: null because they do not run a full task.
Use
import json
from datasets import load_dataset
rows = load_dataset('jeorgexyz/lua-agent-evals', 'decoder_trials', split='test')
trace = json.loads(rows[0]['trace_json'])
This dataset contains only developer-run experiments on synthetic tasks and repository fixtures. Public Space visitors' prompts and traces are not collected or uploaded. It is intended for reproducibility, teaching and debugging, not training on private agent conversations. All source and authored fixtures are MIT licensed; the original model repositories document their checkpoint licenses.
Structure
decoder_trials 60 rows
| Split | Rows | Size |
|---|---|---|
| test | 60 | 117.2 KB |
loop_ablations 64 rows
| Split | Rows | Size |
|---|---|---|
| test | 64 | 385.8 KB |
qwen_runs 16 rows
| Split | Rows | Size |
|---|---|---|
| test | 16 | 85.5 KB |
tasks 8 rows
| Split | Rows | Size |
|---|---|---|
| test | 8 | 4.1 KB |
Details
- Repository
- jeorgexyz/lua-agent-evals
- Publisher
- Jeorge A.
- Task category
- Not stated by the source
- Tags
- agents, tool-calling, constrained-decoding
- Size category
- n<1K
- Languages
- en
- Revision
- 4b60bb31ae4091d4b92ee016ab402b610b9cc7f4
- Last updated
- 2026-09-21
Files
30 files, 886.8 KB in total.
Every file
| File | Type | Size | SHA-256 |
|---|---|---|---|
| data/decoder_trials.jsonl | Data | 155.5 KB | — |
| data/loop_ablations.jsonl | Data | 460.1 KB | — |
| data/qwen_runs.jsonl | Data | 100.9 KB | — |
| data/tasks.jsonl | Data | 5.7 KB | — |
| manifest.json | Data | 762 B | — |
| provenance/constrained-vs-free.txt | Data | 1.9 KB | — |
| provenance/eval-qwen1.5b.txt | Data | 948 B | — |
| provenance/source/eval/fixtures/big.txt | Data | 20.9 KB | — |
| provenance/source/eval/fixtures/config.txt | Data | 64 B | — |
| provenance/source/eval/fixtures/notes.txt | Data | 76 B | — |
| provenance/source/space/requirements.txt | Data | 104 B | — |
| LICENSE | Documentation | 1.1 KB | — |
| README.md | Documentation | 6.2 KB | — |
| provenance/source/agent.lua | Other | 9.6 KB | — |
| provenance/source/backend/local.lua | Other | 10.8 KB | — |
| provenance/source/bpe.lua | Other | 3.2 KB | — |
| provenance/source/context.lua | Other | 9.3 KB | — |
| provenance/source/eval/tasks/tasks.lua | Other | 16.3 KB | — |
| provenance/source/grammar.lua | Other | 14.9 KB | — |
| provenance/source/protocol.lua | Other | 7.9 KB | — |
| provenance/source/space/lab.lua | Other | 5.9 KB | — |
| provenance/source/space/models.py | Other | 5.0 KB | — |
| provenance/source/space/revisions.py | Other | 170 B | — |
| provenance/source/space/runtime.py | Other | 7.3 KB | — |
| provenance/source/space/vendor/lua_llama/utils.lua | Other | 2.4 KB | — |
| provenance/source/tools.lua | Other | 11.6 KB | — |
| provenance/source/tools/llama2c.py | Other | 11.8 KB | — |
| provenance/source/trace.lua | Other | 9.9 KB | — |
| .gitattributes | Repository | 2.5 KB | — |
| provenance/source/space/vendor/lua_llama/tokenizer.lua | Tokenizer | 4.0 KB | — |
License and Download
- License
- mit
- Access
- No access gate
Released by Jeorge A. through its official repository on Hugging Face. Read the license.