Inspiration

On a student engineering team, parts break constantly. A bracket snaps mid-match, a printed mount fails on the car, a shaft shears. The response is almost always the same: print it thicker and hope.

Sometimes that works. Often it doesn't, because the real cause was a sharp internal corner or the direction the part was printed in, and adding material fixes neither.

The information is right there. A fracture surface records how it failed — fatigue leaves concentric beach marks radiating from an origin, ductile overload leaves necking and shear lips, a print that delaminated leaves one flat plane with the extrusion beads still intact. Reading it is a real skill, and it normally takes years of experience or a scanning electron microscope in a metallurgy lab.

So the expertise exists. It just isn't anywhere near the people who need it most.

We named the project Archilles after the thing it looks for: the weak point that decides when something fails.

What it does

Archilles has two modes, which are the same analysis pointed in opposite directions.

Postmortem — past tense. Photograph a part that already broke. It identifies the material, names the failure mode from the evidence visible on the fracture surface, explains the probable cause, and ranks three or four fixes with their real trade-offs. An interactive 3D exhibit shows the part as found, then rebuilt with each of the top fixes.

Forecast — future tense. Photograph a place or an object that hasn't failed yet, and find out where it will, and what to change now.

Three design decisions shape everything:

Evidence before conclusion. The model has to list what it can actually see before it is allowed to name a failure mode. That makes the reasoning auditable — you can check whether the observations it cited are really in the photo.

It is allowed to say no. If the photo is out of focus, badly lit, or the fracture surface is hidden, it says so and explains what a better photo would look like. One of our bundled examples is exactly this case: a craft stick with a split that never opened, so the fracture surface is invisible, and the system correctly refuses to guess.

The model never does the maths. Stress concentration factors, fillet improvements and wall thickness checks come from mechanics.py, which interpolates Peterson chart values in pure Python. Those numbers are tagged Calculated in the interface so you can tell at a glance which parts of the output were computed and which were generated.

How we built it

Python and FastAPI on the backend, a vision-language model for reading the image, and a single-page frontend with a three.js exhibit. No database, no build step.

The pipeline:

photo → evidence extraction → failure mode (from the knowledge base)
      → ranked fixes → mechanics.py quantifies the geometry ones
      → 3D schematic of the part as found and as fixed

The knowledge base is a hand-written reference of eleven failure modes across printed polymer, metal and wood. Each block covers the visual signature, the typical cause, what to change, and — the part that matters most — how to tell it apart from the mode it is most often confused with. Layer delamination versus cross-layer fracture in a print looks like a small distinction and is the difference between reorienting the part and redesigning it.

For the calculation, peak stress follows from the nominal stress and the geometry:

$$\sigma_{max} = K_t \cdot \sigma_{nom}$$

where \( K_t \) is the stress concentration factor. For a notched bar in bending, a sharp corner carries \( K_t \approx 3.0 \). Adding a radius of roughly 0.3 times the section depth brings that to \( K_t \approx 1.45 \), which is about a 50% reduction in peak stress for a change that costs nothing to make.

So when Archilles recommends a fillet, it reports the actual before-and-after rather than asserting that fillets are good.

Validating it

The honest problem with pointing a language model at a photograph is that it will produce a confident, fluent failure reason for anything you show it. A mentor put exactly that to us, and it is the right objection.

So we measured instead of claiming.

We built a specimen set by breaking parts ourselves in controlled ways, which means the ground truth is certain rather than inferred. A paperclip bent back and forth until it parts is fatigue. The same paperclip pulled apart with pliers is ductile overload. A printed bar snapped across the layer lines is delamination; the same bar snapped the strong direction is a cross-layer fracture. A wood dowel bent by hand splinters in tension and crushes in compression; twisted, it splits helically along the grain.

Then we photographed and labelled them, held most of the set back from the model, and ran it.

We also added null specimens — an intact bar, a clean bolt, and an object that isn't a part at all. If the system produces a confident diagnosis for something unbroken, it is fabricating, and we want to know. The evaluation harness has a hash-based leak guard so we can't accidentally test on the same photos we use as few-shot examples, which would make the number meaningless.

Challenges we ran into

Overconfidence was the hard one. Our defences ended up being structural rather than prompt tweaks: force the evidence list before the conclusion, require a rejected alternative with a specific reason, allow refusal with an explanation, and test against things that aren't broken.

Photo quality turned out to be most of our error. A fracture surface needs raking light and a clean background. We were shooting on a varnished wood table in a crowded hall at five in the morning, and the results were bad for reasons that had nothing to do with the model. The fix was to stop accepting whatever photo arrived and guide the capture instead — torch at an angle, a coin in frame for scale, a minimum distance. That changed more than any prompt change did.

Being honest about the 3D model. One photograph cannot give you real geometry. The exhibit is rebuilt from a simple shape with estimated dimensions, and the page says so in plain language. It would have been easy to let it imply a measured reconstruction.

Scope, repeatedly. We spent longer than we should have deciding what to build, and the version that survived is narrower than the ones we abandoned.

What we learned

That an evaluation set is not overhead, it's the product. Before we had one we could only say the thing seemed to work. Afterwards we could say what it gets right, what it gets wrong, and under what conditions — and the third of those is what makes the first two believable.

That the fastest way to get certain labels is to cause the failure yourself.

And that when a model is the commodity part of a system, the things that aren't commodity are the authored domain knowledge, the measurement, and the arithmetic you refuse to delegate.

What's next

Guided capture built into the camera flow rather than documented alongside it. More specimens, since every labelled fracture surface compounds and the dataset is the part that gets better with time while the model is equally available to everyone. Composites and welds, which fail in ways none of our current modes cover. And on the Forecast side, scaling from a single object up to a portfolio: which of these four hundred buildings warrants an engineer this quarter.

Archilles flags what deserves an expert's attention. It does not replace one, and it says so in the output.

Share this project:

Updates

Submission history