Skip to content

slayer-evals: capability benchmark — do agents reach for SLayer's DSL? - #1

Merged
ZmeiGorynych merged 11 commits into
mainfrom
egor/dev-2055-slayer-evals-capability-benchmark-do-agents-actually-reach
Oct 6, 2026
Merged

ZmeiGorynych merged 11 commits into
mainfrom
egor/dev-2055-slayer-evals-capability-benchmark-do-agents-actually-reach

Conversation

@ZmeiGorynych

Copy link
Copy Markdown
Member

A benchmark that measures whether an agent talking to SLayer through its MCP server answers analytics questions with one well-formed SLayer query, or pulls rows and does the work by hand. Misses point at the MCP surface (tool descriptions, help, errors) to fix in slayer.

What's in it

  • 25 tasks covering feature-matrix rows Q1–Q18, Q20, Q21 and Q23–Q25 (Q19 and Q22 are left out). Each is a plain business question about one seeded DuckDB demo database, with truth from hand-written SQL and committed snapshots. The relative-date task is xfail until SLayer's MCP server can pin "now" (DEV-2058).
  • Grading: a trial passes when the answer is correct and is a single query's result, meaning one successful SLayer query returned the truth itself, with no combining and no post-processing. Columns match by name, then by values, so agents can name them freely. Five informational flags (used Python, raw SQL, model edits, SLayer errors, several queries) are counted but don't affect passing.
  • Agent: a hermetic Claude Agent SDK agent with an empty config dir, no built-ins and only its own MCP servers (the trial aborts on any other). SLayer runs verbatim under an allow-listed env -i. Two profiles: slayer and slayer+python (Python in a sandboxed subprocess). Any agent can be plugged in through one adapter class.
  • Runner and CLI: slayer-evals build | truth | run | report. Each trial runs in its own process on its own copy of the database and store. Runs support repeat / until-pass modes, explicit --subscription-auth / --api-key-auth, and concurrency. A run directory holds the results, normalized traces, the full session transcripts and a markdown report.
  • The living-architecture model (eight nodes and their import law) and CI (ruff, basedpyright, non-integration tests).

Baseline (Opus 5.5, one trial per task and profile)

Profile Correct Single query Passed
slayer 23/24 19/24 19/24
slayer+python 23/24 18/24 17/24

The answers are almost always right. Most misses involve rolling windows (Q11), ordering by a measure that isn't shown (Q13), deep composition (Q7) and fan-out-safe cross-model aggregates (Q6). See results/baseline/report.md.

poetry run slayer-evals run --subscription-auth --env-file .env.agents --rows Q1

Building the tasks turned up two SLayer bugs: DEV-2062 and DEV-2063.

Closes DEV-2055

Project scaffold (pyproject, lock), test helpers, fake SDK client and fake agents,
fixtures captured from slayer mcp 1.0.2, synthetic run directories for the report,
and tests covering every scenario of the six delta specs.
…port and CLI

Runner may import report (design.md node table and the import-law test updated, approved).
Test-only fixes: typing narrowings, split composite asserts, atomic attempt counter in the fake agent.
…pilot

Columns match by values when names differ (mapping recorded on the verdict), ISO months normalize,
the CLI's {"result": ...} envelope and SLayer's SQL preamble are unwrapped, the system prompt asks
for JSON results, SLayer launches under env -i, and transcripts end with a session line.
Unordered truth rows are sorted and snapshots compare floats within 1e-9 (parallel sums differ in the last bits).
…lity predicates and hack rules

Kind lists for refusal tasks, the system prompt names the submit tool exactly.
…xit, path-safe names, strict selectors, clean store rebuild
@ZmeiGorynych
ZmeiGorynych merged commit 2753181 into main Oct 6, 2026
1 check passed
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