Local models
2026-10-13
Five open models on one laptop, six printable parts, every result graded by measuring the part.
I design parts with frontier models in the cloud. This is the backup for when the cloud or the internet is down: the same kind of work, offline, on the laptop described on the local models page. It is not a replacement for the frontier models, and the results below show why.
Since then: the harness, not the model (2026-10-14). The stock model from this page, given tools to measure its own parts, went from 18 to 27 of 28 harder parts fully right.
How it works
I describe a part in a chat, from my phone or a terminal. The model writes it in OpenSCAD, a language that describes a part as code, using the BOSL2 library for things like pipe threads. Then it loops:
Every version is kept. My phone shows the part turning in 3-D as each version lands, and FreeCAD on the same laptop picks up each one about a second after it's built, keeping the camera where I left it. Nothing goes to the internet.
In the first real test, the model drew a cube with a hole through it, looked at the sheet, wrote “The sheet shows a solid cube”, found the hole hadn't cut, and fixed it. That loop is the whole point: a model that can see its own part catches mistakes a model writing blind can't.
The models
Qwen 3.8 27B RVN Heretic abliterated
3-bit (IQ3_XXS) · 10.6 GB + 0.9 GB vision · 4 of 6 parts fully right · 67/77 checks · 33 min in all
0bserverx/Qwen3.8-27B-Heretic-GSQ-RCO-GGUF
Qwen 3.8 27B stock
2-bit (IQ2_S) · 9.6 GB + 0.9 GB vision · 2 of 6 parts fully right · 65/80 checks · 53 min in all
ISTA-DASLab/Qwen3.8-27B-GSQ-RCO-GGUF
Qwen 3.8 27B, vision off stock, blind
the same file, without the vision part · 2 of 6 parts fully right · 60/66 checks · 40 min in all
ISTA-DASLab/Qwen3.8-27B-GSQ-RCO-GGUF
Underdog Saluki 27B 1.0 fine-tune
2-bit mix · 8.3 GB + 0.9 GB vision · 2 of 6 parts fully right · 52/65 checks · 44 min in all
Kujira/Underdog-Saluki-27B-1.0-MTP-GGUF
Qwen 3.5 9B Heretic v2 small
8-bit · 9.5 GB + 0.6 GB vision · 0 of 6 parts fully right · 31/65 checks · 21 min in all
trohrbaugh/Qwen3.5-9B-heretic-v2
All run with llama.cpp on a 16 GB RTX 5080 Laptop GPU, with 48k of context. The four 27B models share one vision part. “Abliterated” means its refusals were removed; for CAD that changes nothing on purpose, but this copy is also a less squeezed 3-bit file than the stock 2-bit one, so part of its lead may come from that alone.
How it was graded
Each model got each prompt once, as a fresh part, with 15 minutes and at most 10 build attempts. A separate grader then measured the final part, not the model's own account of it: overall size and position, one body, a sealed mesh, and probes at points that must be solid or empty, such as inside each hole.
For the pipe threads it measures the thread itself: 14 threads per inch, the 1:16 taper running the right way, the size at the large end, the thread depth, and the length. The coupling must also have no flat ledge in its bore: these parts carry water or air, so a diameter changes along a taper, never at a step. Before trusting the grader, I ran it on correct reference parts, which pass every check, and on five deliberately wrong ones: a metric thread, a plug threaded upside down, a reversed coupling, one with a ledge, and a standoff turned the wrong way. Each failed on exactly the check it should.
A part is “fully right” only when every check passes. A part that never built gets a single check, the one it failed.
An L-bracket
Two plain extrusions and two holes, with every position given.
Make an L-bracket. The base leg lies flat on the bed: 40 mm long along +X starting at x = 0, 25 mm wide along Y centred on y = 0, 4 mm thick. The upright leg is at x = 0 to 4 and rises to 30 mm tall. Put a 4.5 mm through hole in each leg: in the base at x = 26, y = 0; in the upright at z = 18, y = 0.



A plate with two pegs and a rib
Protrusions standing on a plate, at given places.
A base plate 60 x 40 x 5 mm with its corner at the origin (x 0 to 60, y 0 to 40), lying flat on the bed. On top of it, two round pegs 8 mm in diameter and 12 mm tall, centred at x = 15, y = 20 and at x = 45, y = 20. Between them, a straight rib from x = 20 to x = 40, 3 mm wide, centred on y = 20, standing 8 mm tall on the plate.





A hex standoff
A straight extrusion that must face the right way, with a hole through it.
A hex standoff, 10 mm across the flats and 25 mm tall, standing on the bed and centred on the origin. Turn it so the flats face +Y and -Y (the corners point along X). An M4 clearance hole goes straight through the middle.





A 1/2" NPT pipe plug
A hex head and a tapered pipe thread, small end up.
A 1/2-inch NPT pipe plug. A hex head 22 mm across the flats and 8 mm tall sits flat on the bed, centred on the origin. On top of the head, a 1/2 NPT male thread of the standard length, with its small end at the top. The plug is solid, with no bore.





A 1/2" NPT coupling
A female pipe thread from each end, and a smooth bore between them.
A 1/2-inch NPT coupling: a round body 30 mm in diameter and 44 mm long, standing on the bed and centred on the origin, with a 1/2 NPT female thread of the standard length going in from each end, so a pipe screws into the top and another into the bottom. Between the two threads the bore is open and smooth.





A block copied from a picture
Sizes in words; where the holes and slot go, only from the picture.
Make the part in the picture. It is a 40 x 20 x 10 mm block with its corner at the origin (x 0 to 40, y 0 to 20). The two round holes go straight through, top to bottom, and are 5 mm across. The slot across the top is 6 mm wide and 4 mm deep. Work out where the holes and the slot are from the picture.





All six
| Model | Bracket | Pegs | Standoff | Plug | Coupling | Picture | Right |
|---|---|---|---|---|---|---|---|
| Heretic | 5/10 | 15/15 | 14/14 | 11/11 | 10/15 | 12/12 | 4 of 6 |
| Stock | 10/10 | 7/15 | 13/14 | 11/11 | 16/18 | 8/12 | 2 of 6 |
| Stock, blind | 10/10 | 15/15 | 13/14 | 10/11 | 12/15 | 0/1 | 2 of 6 |
| Saluki | 0/1 | 12/15 | 14/14 | 11/11 | 8/12 | 7/12 | 2 of 6 |
| 9B | 0/1 | 6/15 | 4/14 | 8/11 | 6/12 | 7/12 | 0 of 6 |
One run each, so a single result can swing either way. The stock model's bracket ran first, before the instructions gained a section on pipe threads; that section doesn't bear on a bracket.
What I learned