This is a really good way of thinking about the “AI is unpredictable” problem. I especially liked the idea of moving the deterministic boundary instead of trying to force the LLM itself to behave deterministically.
The data → LLM → input → deterministic tool → output pattern feels much more practical than endlessly adding instructions to a prompt and hoping the model produces the same artifact every time. At some point, a 200-line prompt is basically a badly maintained program written in English. 😄
I also appreciate the reminder that deterministic code isn’t automatically deterministic either. Things like timestamps, timezone differences, unordered collections, and unpinned dependencies can quietly reintroduce the same problem.
“Use the LLM where ambiguity is unavoidable. Use code where repeatability matters.” is probably the takeaway I’ll keep from this one. It’s a simple architectural boundary, but it makes a lot of sense.