Repository navigation
Portable results: an EvalPort adapter for src/aggregators output? #271
adhabnr-ux
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Hi — I maintain EvalPort, an open interchange spec for eval data (
TestCase/Grader/Result/ResultSet/GraderResult, Python + TS SDKs). Posting here rather than opening an issue since this is a "would you want it" question, not a bug.I went through
src/aggregators/aggregate_results.pyand thetasks/<mcp>/<suite>/<category>/<task_id>/layout, and the mapping onto EvalPort's model is close to 1:1:tasks/<mcp>/<suite>/<category>/<task_id>/{description.md,verify.py}→TestCase.input(description) + acode-typeGrader(verify.py is a sandboxed grading function, which is exactly what EvalPort'scodegrader type models — no lossy translation needed).results/<exp>/<model>__<mcp>/run-N/<category>__<task>/meta.json'sexecution_result.{success,error_message}→GraderResult{passed, score, metadata.error_message}.meta.json(agent_execution_time,token_usage.{input,output,total}_tokens,turn_count,actual_model_name) →Result.metadata, unchanged.run-1..kstructure thataggregate_results.pyalready reduces to pass@1/pass@k/pass^k → aResultSetpermodel__mcp, withmetadata.num_repetitions = k.That last one isn't hand-wavy on my end — how
ResultSetshould represent repeated-attempt evals (num_repetitions/epochs) is an actually-open question in EvalPort's own spec right now (discussion #22), and MCPMark's pass@k/pass^k over k runs is real production data for that question, not a hypothetical.Sketch of the converter (
meta.json→ EvalPort dicts):I'd write this as a standalone
mcpmark-openeval-adapterpackage (same shape asadapters/autogen-openeval-adapterin the EvalPort repo —to_openeval()/from_openeval(), tests against the real validator, doesn't touch MCPMark's code at all) rather than a PR into this repo, since it only needs the publicmeta.json/tasks/shapes and MCPMark already has enough on its plate maintaining 127 verified tasks across 5 services.Two questions before I build it:
meta.json's shape (the fields above) stable enough across therun-*layout that I should treat it as a de facto public interface, or does it change often enough that I'd be chasing it?description.md/verify.pyscaffolding for a new MCPMark task? That's a bigger ask (verify.py is Python-executed against live sandboxes, not a declarative grader spec), so I'm not proposing it now, just checking if it's worth designing for.Happy to build the adapter regardless and link it back here once it exists — mainly want to sanity-check the
meta.jsonstability question first since that's the part I can't verify from the code alone.— Sahi, independent contributor (not affiliated with this project)
All reactions