blog · 2026-10-12

Introducing BenchCAD 2.0

A 3D modeling benchmark that takes professional expertise in hardware engineering.

0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 $0.03 $0.1 $0.3 $1 $3 $10 $30 cost per case, USD (log scale) Fable 5.1 · low effort · score 0.09 at $1.74 per case Fable 5.1 · medium effort · score 0.11 at $4.76 per case Fable 5.1 · high effort · score 0.13 at $10.80 per case Fable 5.1 · xhigh effort · score 0.27 at $31.61 per case Fable 5.1 · max effort · score 0.30 at $48.46 per case Haiku 5.5 · low effort · score 0.01 at $0.02 per case Haiku 5.5 · medium effort · score 0.03 at $0.03 per case Haiku 5.5 · high effort · score 0.08 at $0.06 per case Haiku 5.5 · xhigh effort · score 0.15 at $0.81 per case Haiku 5.5 · max effort · score 0.18 at $8.69 per case Sonnet 5.5 · low effort · score 0.05 at $0.05 per case Sonnet 5.5 · medium effort · score 0.06 at $0.15 per case Sonnet 5.5 · high effort · score 0.14 at $1.48 per case Sonnet 5.5 · xhigh effort · score 0.31 at $5.16 per case Sonnet 5.5 · max effort · score 0.41 at $43.33 per case Opus 5.5 · low effort · score 0.06 at $0.06 per case Opus 5.5 · medium effort · score 0.13 at $0.68 per case Opus 5.5 · high effort · score 0.18 at $2.36 per case Opus 5.5 · xhigh effort · score 0.32 at $8.16 per case Opus 5.5 · max effort · score 0.57 at $27.58 per case GPT-6 Astra · low effort · score 0.14 at $0.44 per case GPT-6 Astra · medium effort · score 0.31 at $2.73 per case GPT-6 Astra · high effort · score 0.41 at $5.11 per case GPT-6 Astra · xhigh effort · score 0.45 at $6.67 per case GPT-6 Astra · max effort · score 0.59 at $11.05 per case Fable 5.1 Haiku 5.5 Sonnet 5.5 Opus 5.5 GPT-6 Astra score

Figure 1. Score on Core against cost and time per case. Each point is one model at one reasoning effort, averaged over all 100 Core cases.

TL;DR
  • BenchCAD 2.0 evaluates AI models on real-world hardware engineering tasks: creating 3D parts and assemblies from engineering drawings or rendered images, and recovering circuit connectivity from renders of PCBs. We evaluate each task separately to understand where models struggle.
  • On Core, our 100 held-out cases, the best model scores just 0.59 out of 1.
  • In assemblies, models mostly get the parts right and the placement wrong: for GPT-6 Astra, Claude Opus 5.5 and Claude Sonnet 5.5, 83–96% of the part types that score zero have the right shape in the wrong place.

Frontier models have improved significantly on 3D modeling benchmarks over the past six months, including BenchCAD 1.0. But most existing benchmarks still focus on individual CAD parts, often reconstructed from a few clean renders or a text description.

Real engineering work rarely comes that way. Engineers work from dimensioned engineering drawings, assemble machines from dozens of parts, and reverse-engineer existing hardware. These tasks require both 3D modeling and spatial reasoning: reading engineering drawings, reconstructing accurate geometry, and understanding how parts fit together in 3D space. Even if every part is modeled correctly, the assembly can still be wrong.

BenchCAD 2.0 extends our original part-level benchmark to these more complex tasks. Models build CAD parts from engineering drawings, assemble machines using supplied or newly modeled components, and recover circuit wiring from renders of assembled boards. We evaluate each task separately against references, without an LLM judge, to understand where models do well and where they lose points. Core, the 100 cases behind our scores, is held out and shared only under an evaluation-only agreement, to limit contamination.

Six tasks

WorkTaskInputOutput
Drawing to CADPartA dimensioned part drawingA CAD part
Assembly, parts suppliedEvery part as a 3D file, plus the assembly drawingAn assembly
Parts and assemblyThe assembly drawing, drawings of the parts to make, 3D files of the othersParts and an assembly
Reverse engineeringPartFour rendered viewsA CAD part
AssemblyViews of the assembly and of each partParts and an assembly
ECADSix renders of an assembled boardA wiring graph

Examples for each task, replaying a generated answer step by step next to the reference:

A gearbox housing, built from one dimensioned drawing.
A forked lever. One cross-hole goes through one wall instead of both.
A 27-part roller module, with the carrier oriented at the angle the model infers.
A 20-part support frame at low effort. The model reverses three of the bars.
A 58-part pneumatic cutting unit: five parts built from drawings, the rest placed.
A 28-part lifting platform: five parts built from drawings, the rest placed.

Input: four rendered views of the part at one scale. One camera direction is given exactly; the other three are given only roughly, each off by 3–8°.

A helical wind-turbine rotor, rebuilt from four rendered views.

Input: four rendered views of the part at one scale. One camera direction is given exactly; the other three are given only roughly, each off by 3–8°.

A steep-taper tool holder, rebuilt from four rendered views.

Input: four rendered views of the assembly, four views of each part alone and inside the assembly, and a parts list. No 3D files.

A pipe clamp with an elastomer insert, rebuilt from views.

Input: four rendered views of the assembly, four views of each part alone and inside the assembly, and a parts list. No 3D files.

A rotor–stator mixing head, rebuilt from views.

Input: four rendered views of the assembly, four views of each part alone and inside the assembly, and a parts list. No 3D files.

A tandem inducer. The blades come out one even thickness.

Input: six renders of the board, the top, the bottom and two oblique views of each side, plus a drawing of each inner copper layer if the board has any.

A 74-component motor driver. Two misread chip names cause most of the misses.

Input: six renders of the board, the top, the bottom and two oblique views of each side, plus a drawing of each inner copper layer if the board has any.

A microcontroller core board with a USB connector.

Input: six renders of the board, the top, the bottom and two oblique views of each side, plus a drawing of each inner copper layer if the board has any.

A small RC board, wired exactly.

Results

We ran five frontier models on Core at every reasoning-effort setting, each with up to 30 rounds per case in an offline sandbox that has Python's standard library, CadQuery, NumPy, SciPy and an image-cropping tool, but no built-in rendering tool; models can write and run their own rendering code.

At max effort, GPT-6 Astra and Claude Opus 5.5 score about the same, 0.59 and 0.57, but Astra costs $11 per case against $28 and takes a median 62 minutes against 224.

Leaderboard
RankModelScoreCost / caseTokens / caseTime / case
1GPT-6 Astra (max)OpenAI0.59$11135k62 min
2Claude Opus 5.5 (max)Anthropic0.57$281.3M3.7 h
3GPT-6 Astra (xhigh)OpenAI0.45$770k31 min
4Claude Sonnet 5.5 (max)Anthropic0.41$432.7M6.2 h
5GPT-6 Astra (high)OpenAI0.41$547k23 min
6Claude Opus 5.5 (xhigh)Anthropic0.32$8287k58 min
7Claude Sonnet 5.5 (xhigh)Anthropic0.31$5340k74 min
8GPT-6 Astra (medium)OpenAI0.31$324k15 min

Haiku 5.5 is slower at low effort than at medium (Figure 1, time per case) because it often never hands in an answer: 62 of 100 low-effort episodes run all 30 rounds without a submit (28 at medium, 6 at high), and each scores 0. See the appendix.

GPT-6 Astra Opus 5.5 Sonnet 5.5 Haiku 5.5 Fable 5.1 0 0.25 0.5 0.75 1 Part, from its drawing6 cases GPT-6 Astra · Part, from its drawing · 0.810.81 Claude Opus 5.5 · Part, from its drawing · 0.840.84 Claude Sonnet 5.5 · Part, from its drawing · 0.790.79 Claude Haiku 5.5 · Part, from its drawing · 0.560.56 Claude Fable 5.1 · Part, from its drawing · 0.520.52 Assembly, parts supplied11 cases GPT-6 Astra · Assembly, parts supplied · 0.720.72 Claude Opus 5.5 · Assembly, parts supplied · 0.670.67 Claude Sonnet 5.5 · Assembly, parts supplied · 0.340.34 Claude Haiku 5.5 · Assembly, parts supplied · 0.090.09 Claude Fable 5.1 · Assembly, parts supplied · 0.400.40 Parts + assembly, from drawings18 cases GPT-6 Astra · Parts + assembly, from drawings · 0.690.69 Claude Opus 5.5 · Parts + assembly, from drawings · 0.660.66 Claude Sonnet 5.5 · Parts + assembly, from drawings · 0.220.22 Claude Haiku 5.5 · Parts + assembly, from drawings · 0.010.01 Claude Fable 5.1 · Parts + assembly, from drawings · 0.370.37 Part, from renders28 cases GPT-6 Astra · Part, from renders · 0.580.58 Claude Opus 5.5 · Part, from renders · 0.590.59 Claude Sonnet 5.5 · Part, from renders · 0.590.59 Claude Haiku 5.5 · Part, from renders · 0.320.32 Claude Fable 5.1 · Part, from renders · 0.310.31 Assembly, from renders25 cases GPT-6 Astra · Assembly, from renders · 0.500.50 Claude Opus 5.5 · Assembly, from renders · 0.440.44 Claude Sonnet 5.5 · Assembly, from renders · 0.440.44 Claude Haiku 5.5 · Assembly, from renders · 0.150.15 Claude Fable 5.1 · Assembly, from renders · 0.250.25 ECAD, from renders12 cases GPT-6 Astra · ECAD, from renders · 0.460.46 Claude Opus 5.5 · ECAD, from renders · 0.400.40 Claude Sonnet 5.5 · ECAD, from renders · 0.110.11 Claude Haiku 5.5 · ECAD, from renders · 0.070.07 Claude Fable 5.1 · ECAD, from renders · 0.100.10

Figure 2. Score per task at max reasoning effort. Scores run from 0 to 1 and measure how close the answer is to the reference.

How we score. Every answer is scored automatically against its reference, without an LLM judge. A part gets 0.8 for 3D overlap and 0.2 for topology, on its own bounding box, so absolute size is not charged. An assembly is also scored on where each part sits, and the drawing-based assembly tasks charge absolute size, since the drawing fixes it. A board is scored on how well its wiring graph matches the reference connections. The overall score is the mean over the 100 Core cases, each weighted equally; a run that never submits scores 0. Scoring covers geometry, part placement and circuit connectivity, not manufacturability or physical performance. Details are in METRICS.md.

Where models lose points

Right parts, wrong place

A support frame: the reference and GPT-6 Astra's answer at low effort

Every model scores lower on assemblies than on single parts from the same kind of input, and mostly not because the parts are wrong: across the assembly cases of GPT-6 Astra, Claude Opus 5.5 and Claude Sonnet 5.5, 83–96% of the part types that score zero have the right shape and sit in the wrong place. On this support frame at low effort, Astra placed every supplied part but turned three angle bars end for end. Higher effort does not remove the problem: on a rotary clamping mechanism at max effort, Astra built both possible positions for 36 jaws, rendered them side by side, and submitted the wrong one, every jaw 22 mm too far out.

No answer, or a hasty one

Some runs lose points before any geometry is scored. At max effort, Claude Sonnet 5.5 submits nothing on 4 of the 12 circuit boards, and Claude Fable 5.1 on 3. At low effort, GPT-6 Astra and Claude Opus 5.5 usually answer parts from views in a round or two, rarely rendering to check (our post on 2D proxies). They score 0.14 and 0.06 at low effort, against 0.59 and 0.57 at max.

No check for shorts and opens

Models find 85–96% of a board's components but fewer of its connections: 80% for GPT-6 Astra and 68% for Claude Opus 5.5 at max effort. Power rails cost the most. On one 101-component board, Astra merged +3.3V, +5V, GND and VDD into one net, and Opus split +5V into 14 nets, which scores the board 0. Neither run ever tested for a short or an open.

The assembly and board answers look right at a glance: the frame has every part, the board nearly every component. What goes wrong is what a glance misses: which way a part faces, which pins share a net. Better CAD agents need checks on placement and connectivity, not just better generation.

How to run

The Public dataset, evaluation harness and scoring code are available on GitHub and Hugging Face. Researchers and model developers can also request access to Core, our 100-case held-out evaluation set, under an evaluation-only agreement and run the benchmark on their own infrastructure.

# Public set: try the harness (scores are not reportable)
tools/run_core.sh --model <provider/model> --set public --effort low

# Core: the 100 cases behind the scores reported here
tools/run_core.sh --model <provider/model> --set core

Appendix

Why Haiku 5.5 is slower at low effort than at medium

EffortMean roundsRuns using all 30 roundsNo submissionMedian time per callMedian output tokens per callTotal timeMean score
low22.3636226 s95715.5 h0.006
medium13.4282833 s1,99912.3 h0.026
high11.266125 s8,13241.4 h0.081

Haiku 5.5 on Core, 100 cases, up to 30 rounds each. Each low-effort call is the fastest and cheapest, but low effort rarely hands in an answer: in 62 of 100 cases it used all 30 rounds and never submitted, and those runs take 13.6 of its 15.5 hours. In the trajectories, the model at low and medium effort treats running its program as handing it in. It waits for a rendered check that the task does not give, then repeats the same program until the rounds run out. A run without a submit scores 0, which is most of low effort's 0.006. Higher effort costs more per call but ends with an answer far more often.

Acknowledgments

We thank Anthropic and OpenAI for their support and for the API credits used to build and evaluate BenchCAD 2.0.

Citation

If you use BenchCAD 2.0, please cite:

@misc{benchcad2_2026,
  title        = {BenchCAD 2.0: Benchmarking Programmatic CAD on Real Engineering Work},
  author       = {{BenchCAD Team}},
  year         = {2026},
  howpublished = {\url{https://benchcad.com/blog/benchcad-2.html}},
  note         = {Blog post}
}