Giving the model a list of functions it can ask you to run. It never runs anything itself. It replies with a name and arguments, your code executes it, and the result goes back in as part of the next request.