Skip to content

feat(pinchbench): add PinchBench benchmark adapter - #244

Open
zeroasterisk wants to merge 3 commits into
Exgentic:mainfrom
zeroasterisk:feat/pinchbench-clean
Open

feat(pinchbench): add PinchBench benchmark adapter#244
zeroasterisk wants to merge 3 commits into
Exgentic:mainfrom
zeroasterisk:feat/pinchbench-clean

Conversation

@zeroasterisk

Copy link
Copy Markdown
Contributor

Summary

Add benchmark adapter for PinchBench, a real-world benchmark for AI coding agents. Evaluates across 12 categories: productivity, research, writing, coding, analysis, CSV analysis, log analysis, meeting analysis, memory, skills, and integrations.

Replaces #240, which accidentally bundled unrelated files. This PR is PinchBench-only.

Design

Follows the documented benchmark adapter pattern (docs/adding-benchmarks.md):

  • Single-file adapter (pinchbench_benchmark.py) with Session, Evaluator, and Benchmark
  • External deps (datasets) imported lazily inside methods — host-importable without benchmark deps
  • Supports both automated grading (per-task Python scripts) and LLM-judge grading
  • Protocol-agnostic action contract: bash + submit

Files changed

  • src/exgentic/benchmarks/pinchbench/ — benchmark adapter package
  • src/exgentic/interfaces/registry.py — registry entry

Validation

Signed-off-by: Alan Blount alan@zeroasterisk.com

Add benchmark adapter for PinchBench (pinchbench.com), a real-world
benchmark for AI coding agents evaluating across 12 categories including
productivity, coding, analysis, and memory.

Signed-off-by: Alan Blount <alan@zeroasterisk.com>
Cover task-file parsing, manifest-driven task indexing, judge-JSON
extraction, session lifecycle and automated/llm_judge/hybrid scoring,
workspace staging, and evaluator aggregation.

Tests build a small in-tree fixture skill repo, so they need no network,
no clone of pinchbench/skill, and no LLM judge credentials.

Signed-off-by: Alan Blount <alan@zeroasterisk.com>
@zeroasterisk
zeroasterisk force-pushed the feat/pinchbench-clean branch from b805420 to b0036d3 Compare July 30, 2026 20:37
A live run against vertex_ai/gemini-2.5-flash always produced 0.0 with
"LLM judge returned unparsable response".  The hardcoded max_tokens=1024
was consumed almost entirely by reasoning tokens (observed: 979 reasoning
/ 41 output), so the verdict JSON was cut off mid-object and every task
scored zero regardless of the answer.

- raise the default judge budget to 4096, overridable via
  PINCHBENCH_JUDGE_MAX_TOKENS
- report finish_reason == "length" as a distinct "truncated" note so a
  broken judge is not indistinguishable from a real 0.0 verdict
- tolerate a None content payload instead of raising in the judge path

Verified against the real judge afterwards: a strong answer scores 0.9
with a per-criterion breakdown, a weak one scores 0.0.

Signed-off-by: Alan Blount <alan@zeroasterisk.com>
@zeroasterisk
zeroasterisk force-pushed the feat/pinchbench-clean branch from 299d6d0 to 40419fc Compare July 30, 2026 21:09
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