Function calling: the quiet shift of the year

Fewer headlines than GPT-4 and more consequences. It's what turns a chat window into a connected system.
Until now we extracted intent with regular expressions over free text, and it failed in entertaining ways. A user says, send an email to Bob. The regex captures email and Bob and misses context. Do they want to send an email, or remind them to? Is Bob the recipient or the subject?
We built layers of fallback: classify first, then extract, then validate. Every layer was a chance for things to go wrong. And they did, reliably, in production.
With guaranteed structured output, the model becomes a translation layer between language and APIs. The model parses the user's intent and produces a function call with named parameters. The API gets exactly what it expects. No fragile parsing, no ambiguity.
The model had to understand your tools to call them correctly. That meant writing tool definitions that were clear, and it meant constraints: a function call either succeeds with valid parameters or it fails explicitly. No in-between.
The practical consequence: the work moves to designing good tools and good permissions, which is ordinary engineering. Your tool definitions need to be precise. Your permission model needs to restrict what the model can call. That's not model engineering. It's API design.
This shift happened quietly while everyone was debating prompt engineering. It probably matters more than the prompt debates do.